1 module directx.d3d12;
2 /*-------------------------------------------------------------------------------------
3  *
4  * Copyright (c) Microsoft Corporation
5  *
6  *-------------------------------------------------------------------------------------*/
7 
8 version(Windows):
9 version(Direct3D_12):
10 
11 public import directx.dxgi;
12 public import directx.d3dcommon;
13 
14 enum {
15     D3D12_16BIT_INDEX_STRIP_CUT_VALUE = 0xffff,
16     D3D12_32BIT_INDEX_STRIP_CUT_VALUE = 0xffffffff,
17     D3D12_8BIT_INDEX_STRIP_CUT_VALUE = 0xff,
18 
19     D3D12_APPEND_ALIGNED_ELEMENT = 0xffffffff,
20 
21     D3D12_ARRAY_AXIS_ADDRESS_RANGE_BIT_COUNT = 9,
22 
23     D3D12_CLIP_OR_CULL_DISTANCE_COUNT = 8,
24     D3D12_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT = 2,
25 
26     D3D12_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT = 14,
27     D3D12_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS = 4,
28     D3D12_COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT = 32,
29     D3D12_COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT = 15,
30     D3D12_COMMONSHADER_CONSTANT_BUFFER_PARTIAL_UPDATE_EXTENTS_BYTE_ALIGNMENT = 16,
31     D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COMPONENTS = 4,
32     D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COUNT = 15,
33     D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READS_PER_INST = 1,
34     D3D12_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READ_PORTS = 1,
35 
36     D3D12_COMMONSHADER_FLOWCONTROL_NESTING_LIMIT = 64,
37 
38     D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COMPONENTS = 4,
39     D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COUNT = 1,
40     D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READS_PER_INST = 1,
41     D3D12_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READ_PORTS = 1,
42 
43     D3D12_COMMONSHADER_IMMEDIATE_VALUE_COMPONENT_BIT_COUNT = 32,
44 
45     D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_COMPONENTS = 1,
46     D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT = 128,
47     D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_READS_PER_INST = 1,
48     D3D12_COMMONSHADER_INPUT_RESOURCE_REGISTER_READ_PORTS = 1,
49     D3D12_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT = 128,
50 
51     D3D12_COMMONSHADER_SAMPLER_REGISTER_COMPONENTS = 1,
52     D3D12_COMMONSHADER_SAMPLER_REGISTER_COUNT = 16,
53     D3D12_COMMONSHADER_SAMPLER_REGISTER_READS_PER_INST = 1,
54     D3D12_COMMONSHADER_SAMPLER_REGISTER_READ_PORTS = 1,
55     D3D12_COMMONSHADER_SAMPLER_SLOT_COUNT = 16,
56 
57     D3D12_COMMONSHADER_SUBROUTINE_NESTING_LIMIT = 32,
58 
59     D3D12_COMMONSHADER_TEMP_REGISTER_COMPONENTS = 4,
60     D3D12_COMMONSHADER_TEMP_REGISTER_COMPONENT_BIT_COUNT = 32,
61     D3D12_COMMONSHADER_TEMP_REGISTER_COUNT = 4096,
62     D3D12_COMMONSHADER_TEMP_REGISTER_READS_PER_INST = 3,
63     D3D12_COMMONSHADER_TEMP_REGISTER_READ_PORTS = 3,
64 
65     D3D12_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MAX = 10,
66     D3D12_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MIN = -10,
67 
68     D3D12_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE = -8,
69     D3D12_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE = 7,
70 
71     D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT = 256,
72 
73     D3D12_CS_4_X_BUCKET00_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 256,
74     D3D12_CS_4_X_BUCKET00_MAX_NUM_THREADS_PER_GROUP = 64,
75     D3D12_CS_4_X_BUCKET01_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 240,
76     D3D12_CS_4_X_BUCKET01_MAX_NUM_THREADS_PER_GROUP = 68,
77     D3D12_CS_4_X_BUCKET02_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 224,
78     D3D12_CS_4_X_BUCKET02_MAX_NUM_THREADS_PER_GROUP = 72,
79     D3D12_CS_4_X_BUCKET03_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 208,
80     D3D12_CS_4_X_BUCKET03_MAX_NUM_THREADS_PER_GROUP = 76,
81     D3D12_CS_4_X_BUCKET04_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 192,
82     D3D12_CS_4_X_BUCKET04_MAX_NUM_THREADS_PER_GROUP = 84,
83     D3D12_CS_4_X_BUCKET05_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 176,
84     D3D12_CS_4_X_BUCKET05_MAX_NUM_THREADS_PER_GROUP = 92,
85     D3D12_CS_4_X_BUCKET06_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 160,
86     D3D12_CS_4_X_BUCKET06_MAX_NUM_THREADS_PER_GROUP = 100,
87     D3D12_CS_4_X_BUCKET07_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 144,
88     D3D12_CS_4_X_BUCKET07_MAX_NUM_THREADS_PER_GROUP = 112,
89     D3D12_CS_4_X_BUCKET08_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 128,
90     D3D12_CS_4_X_BUCKET08_MAX_NUM_THREADS_PER_GROUP = 128,
91     D3D12_CS_4_X_BUCKET09_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 112,
92     D3D12_CS_4_X_BUCKET09_MAX_NUM_THREADS_PER_GROUP = 144,
93     D3D12_CS_4_X_BUCKET10_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 96,
94     D3D12_CS_4_X_BUCKET10_MAX_NUM_THREADS_PER_GROUP = 168,
95     D3D12_CS_4_X_BUCKET11_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 80,
96     D3D12_CS_4_X_BUCKET11_MAX_NUM_THREADS_PER_GROUP = 204,
97     D3D12_CS_4_X_BUCKET12_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 64,
98     D3D12_CS_4_X_BUCKET12_MAX_NUM_THREADS_PER_GROUP = 256,
99     D3D12_CS_4_X_BUCKET13_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 48,
100     D3D12_CS_4_X_BUCKET13_MAX_NUM_THREADS_PER_GROUP = 340,
101     D3D12_CS_4_X_BUCKET14_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 32,
102     D3D12_CS_4_X_BUCKET14_MAX_NUM_THREADS_PER_GROUP = 512,
103     D3D12_CS_4_X_BUCKET15_MAX_BYTES_TGSM_WRITABLE_PER_THREAD = 16,
104     D3D12_CS_4_X_BUCKET15_MAX_NUM_THREADS_PER_GROUP = 768,
105 
106     D3D12_CS_4_X_DISPATCH_MAX_THREAD_GROUPS_IN_Z_DIMENSION = 1,
107     D3D12_CS_4_X_RAW_UAV_BYTE_ALIGNMENT = 256,
108     D3D12_CS_4_X_THREAD_GROUP_MAX_THREADS_PER_GROUP = 768,
109     D3D12_CS_4_X_THREAD_GROUP_MAX_X = 768,
110     D3D12_CS_4_X_THREAD_GROUP_MAX_Y = 768,
111     D3D12_CS_4_X_UAV_REGISTER_COUNT = 1,
112 
113     D3D12_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION = 65535,
114 
115     D3D12_CS_TGSM_REGISTER_COUNT = 8192,
116     D3D12_CS_TGSM_REGISTER_READS_PER_INST = 1,
117     D3D12_CS_TGSM_RESOURCE_REGISTER_COMPONENTS = 1,
118     D3D12_CS_TGSM_RESOURCE_REGISTER_READ_PORTS = 1,
119 
120     D3D12_CS_THREADGROUPID_REGISTER_COMPONENTS = 3,
121     D3D12_CS_THREADGROUPID_REGISTER_COUNT = 1,
122 
123     D3D12_CS_THREADIDINGROUPFLATTENED_REGISTER_COMPONENTS = 1,
124     D3D12_CS_THREADIDINGROUPFLATTENED_REGISTER_COUNT = 1,
125 
126     D3D12_CS_THREADIDINGROUP_REGISTER_COMPONENTS = 3,
127     D3D12_CS_THREADIDINGROUP_REGISTER_COUNT = 1,
128 
129     D3D12_CS_THREADID_REGISTER_COMPONENTS = 3,
130     D3D12_CS_THREADID_REGISTER_COUNT = 1,
131 
132     D3D12_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP = 1024,
133     D3D12_CS_THREAD_GROUP_MAX_X = 1024,
134     D3D12_CS_THREAD_GROUP_MAX_Y = 1024,
135     D3D12_CS_THREAD_GROUP_MAX_Z = 64,
136     D3D12_CS_THREAD_GROUP_MIN_X = 1,
137     D3D12_CS_THREAD_GROUP_MIN_Y = 1,
138     D3D12_CS_THREAD_GROUP_MIN_Z = 1,
139 
140     D3D12_CS_THREAD_LOCAL_TEMP_REGISTER_POOL = 16384,
141 
142     D3D12_DEFAULT_BLEND_FACTOR_ALPHA = 10f,
143     D3D12_DEFAULT_BLEND_FACTOR_BLUE = 10f,
144     D3D12_DEFAULT_BLEND_FACTOR_GREEN = 10f,
145     D3D12_DEFAULT_BLEND_FACTOR_RED = 10f,
146     D3D12_DEFAULT_BORDER_COLOR_COMPONENT = 0f,
147     D3D12_DEFAULT_DEPTH_BIAS = 0,
148 
149     D3D12_DEFAULT_DEPTH_BIAS_CLAMP = 0f,
150     D3D12_DEFAULT_MAX_ANISOTROPY = 16,
151 
152     D3D12_DEFAULT_MIP_LOD_BIAS = 0f ,
153     D3D12_DEFAULT_MSAA_RESOURCE_PLACEMENT_ALIGNMENT = 4194304,
154 
155     D3D12_DEFAULT_RENDER_TARGET_ARRAY_INDEX = 0,
156     D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT = 65536,
157     D3D12_DEFAULT_SAMPLE_MASK = 0xffffffff,
158 
159     D3D12_DEFAULT_SCISSOR_ENDX = 0,
160     D3D12_DEFAULT_SCISSOR_ENDY = 0,
161     D3D12_DEFAULT_SCISSOR_STARTX = 0,
162     D3D12_DEFAULT_SCISSOR_STARTY = 0,
163 
164     D3D12_DEFAULT_SLOPE_SCALED_DEPTH_BIAS = 0f,
165     D3D12_DEFAULT_STENCIL_READ_MASK = 0xff,
166     D3D12_DEFAULT_STENCIL_REFERENCE = 0,
167     D3D12_DEFAULT_STENCIL_WRITE_MASK = 0xff,
168 
169     D3D12_DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX = 0,
170     D3D12_DEFAULT_VIEWPORT_HEIGHT = 0,
171     D3D12_DEFAULT_VIEWPORT_MAX_DEPTH = 0f,
172     D3D12_DEFAULT_VIEWPORT_MIN_DEPTH = 0f,
173     D3D12_DEFAULT_VIEWPORT_TOPLEFTX = 0,
174     D3D12_DEFAULT_VIEWPORT_TOPLEFTY = 0,
175     D3D12_DEFAULT_VIEWPORT_WIDTH = 0,
176 
177     D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND = 0xffffffff,
178 
179     D3D12_DRIVER_RESERVED_REGISTER_SPACE_VALUES_END = 0xfffffff7,
180     D3D12_DRIVER_RESERVED_REGISTER_SPACE_VALUES_START = 0xfffffff0,
181 
182     D3D12_DS_INPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS= 3968,
183     D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENTS = 4,
184     D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT = 32,
185     D3D12_DS_INPUT_CONTROL_POINT_REGISTER_COUNT = 32,
186     D3D12_DS_INPUT_CONTROL_POINT_REGISTER_READS_PER_INST = 2,
187     D3D12_DS_INPUT_CONTROL_POINT_REGISTER_READ_PORTS = 1,
188     D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENTS= 3,
189     D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENT_BIT_COUNT = 32,
190     D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_COUNT = 1,
191     D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_READS_PER_INST = 2,
192     D3D12_DS_INPUT_DOMAIN_POINT_REGISTER_READ_PORTS= 1,
193     D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENTS = 4,
194     D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT = 32,
195     D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_COUNT = 32,
196     D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST = 2,
197     D3D12_DS_INPUT_PATCH_CONSTANT_REGISTER_READ_PORTS = 1,
198     D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS= 1,
199     D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT = 32,
200     D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_COUNT = 1,
201     D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST = 2,
202     D3D12_DS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS= 1,
203     D3D12_DS_OUTPUT_REGISTER_COMPONENTS = 4,
204     D3D12_DS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32,
205     D3D12_DS_OUTPUT_REGISTER_COUNT = 32,
206 
207     D3D12_FLOAT16_FUSED_TOLERANCE_IN_ULP = 6,
208     //D3D12_FLOAT32_MAX = 3402823466e+38f,
209     D3D12_FLOAT32_TO_INTEGER_TOLERANCE_IN_ULP = 6f,
210     D3D12_FLOAT_TO_SRGB_EXPONENT_DENOMINATOR = 24f,
211     D3D12_FLOAT_TO_SRGB_EXPONENT_NUMERATOR = 10f,
212     D3D12_FLOAT_TO_SRGB_OFFSET = 55f,
213     D3D12_FLOAT_TO_SRGB_SCALE_1 = 1292f,
214     D3D12_FLOAT_TO_SRGB_SCALE_2 = 1055f,
215     D3D12_FLOAT_TO_SRGB_THRESHOLD = 31308f,
216     D3D12_FTOI_INSTRUCTION_MAX_INPUT = 2147483647999f,
217     D3D12_FTOI_INSTRUCTION_MIN_INPUT = -2147483648999f,
218     D3D12_FTOU_INSTRUCTION_MAX_INPUT = 4294967295999f,
219     D3D12_FTOU_INSTRUCTION_MIN_INPUT = 0f,
220 
221     D3D12_GS_INPUT_INSTANCE_ID_READS_PER_INST = 2,
222     D3D12_GS_INPUT_INSTANCE_ID_READ_PORTS = 1,
223     D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENTS = 1,
224     D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT= 32,
225     D3D12_GS_INPUT_INSTANCE_ID_REGISTER_COUNT = 1,
226     D3D12_GS_INPUT_PRIM_CONST_REGISTER_COMPONENTS = 1,
227     D3D12_GS_INPUT_PRIM_CONST_REGISTER_COMPONENT_BIT_COUNT = 32,
228     D3D12_GS_INPUT_PRIM_CONST_REGISTER_COUNT = 1,
229     D3D12_GS_INPUT_PRIM_CONST_REGISTER_READS_PER_INST = 2,
230     D3D12_GS_INPUT_PRIM_CONST_REGISTER_READ_PORTS = 1,
231     D3D12_GS_INPUT_REGISTER_COMPONENTS = 4,
232     D3D12_GS_INPUT_REGISTER_COMPONENT_BIT_COUNT = 32,
233     D3D12_GS_INPUT_REGISTER_COUNT = 32,
234     D3D12_GS_INPUT_REGISTER_READS_PER_INST = 2,
235     D3D12_GS_INPUT_REGISTER_READ_PORTS = 1,
236     D3D12_GS_INPUT_REGISTER_VERTICES = 32,
237     D3D12_GS_MAX_INSTANCE_COUNT = 32,
238     D3D12_GS_MAX_OUTPUT_VERTEX_COUNT_ACROSS_INSTANCES = 1024,
239     D3D12_GS_OUTPUT_ELEMENTS = 32,
240     D3D12_GS_OUTPUT_REGISTER_COMPONENTS = 4,
241     D3D12_GS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32,
242     D3D12_GS_OUTPUT_REGISTER_COUNT = 32,
243     D3D12_HS_CONTROL_POINT_PHASE_INPUT_REGISTER_COUNT = 32,
244     D3D12_HS_CONTROL_POINT_PHASE_OUTPUT_REGISTER_COUNT = 32,
245     D3D12_HS_CONTROL_POINT_REGISTER_COMPONENTS = 4,
246     D3D12_HS_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT = 32,
247     D3D12_HS_CONTROL_POINT_REGISTER_READS_PER_INST = 2,
248     D3D12_HS_CONTROL_POINT_REGISTER_READ_PORTS = 1,
249     D3D12_HS_FORK_PHASE_INSTANCE_COUNT_UPPER_BOUND = 0xffffffff,
250     D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENTS = 1,
251     D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT = 32,
252     D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COUNT = 1,
253     D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READS_PER_INST = 2,
254     D3D12_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READ_PORTS = 1,
255     D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENTS = 1,
256     D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT = 32,
257     D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COUNT = 1,
258     D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READS_PER_INST = 2,
259     D3D12_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READ_PORTS = 1,
260     D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS = 1,
261     D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT = 32,
262     D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_COUNT = 1,
263     D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST = 2,
264     D3D12_HS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS = 1,
265     D3D12_HS_JOIN_PHASE_INSTANCE_COUNT_UPPER_BOUND = 0xffffffff,
266     D3D12_HS_MAXTESSFACTOR_LOWER_BOUND = 10f,
267     D3D12_HS_MAXTESSFACTOR_UPPER_BOUND = 640f,
268     D3D12_HS_OUTPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS = 3968,
269     D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENTS = 1,
270     D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENT_BIT_COUNT = 32,
271     D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COUNT = 1,
272     D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READS_PER_INST = 2,
273     D3D12_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READ_PORTS = 1,
274     D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENTS = 4,
275     D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT = 32,
276     D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COUNT = 32,
277     D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST = 2,
278     D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READ_PORTS = 1,
279     D3D12_HS_OUTPUT_PATCH_CONSTANT_REGISTER_SCALAR_COMPONENTS = 128,
280     D3D12_IA_DEFAULT_INDEX_BUFFER_OFFSET_IN_BYTES = 0,
281     D3D12_IA_DEFAULT_PRIMITIVE_TOPOLOGY = 0,
282     D3D12_IA_DEFAULT_VERTEX_BUFFER_OFFSET_IN_BYTES = 0,
283     D3D12_IA_INDEX_INPUT_RESOURCE_SLOT_COUNT = 1,
284     D3D12_IA_INSTANCE_ID_BIT_COUNT = 32,
285     D3D12_IA_INTEGER_ARITHMETIC_BIT_COUNT = 32,
286     D3D12_IA_PATCH_MAX_CONTROL_POINT_COUNT = 32,
287     D3D12_IA_PRIMITIVE_ID_BIT_COUNT= 32,
288     D3D12_IA_VERTEX_ID_BIT_COUNT = 32,
289     D3D12_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT = 32,
290     D3D12_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS = 128,
291     D3D12_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT = 32,
292     D3D12_INTEGER_DIVIDE_BY_ZERO_QUOTIENT = 0xffffffff,
293     D3D12_INTEGER_DIVIDE_BY_ZERO_REMAINDER = 0xffffffff,
294     D3D12_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL = 0xffffffff,
295     D3D12_KEEP_UNORDERED_ACCESS_VIEWS = 0xffffffff,
296     D3D12_LINEAR_GAMMA = 10f,
297     D3D12_MAJOR_VERSION = 12,
298     D3D12_MAX_BORDER_COLOR_COMPONENT = 10f,
299     D3D12_MAX_DEPTH = 10f,
300     D3D12_MAX_LIVE_STATIC_SAMPLERS = 2032,
301     D3D12_MAX_MAXANISOTROPY = 16,
302     D3D12_MAX_MULTISAMPLE_SAMPLE_COUNT = 32,
303     //D3D12_MAX_POSITION_VALUE = 3402823466e+34f,
304     D3D12_MAX_ROOT_COST = 64,
305     D3D12_MAX_SHADER_VISIBLE_DESCRIPTOR_HEAP_SIZE_TIER_1 = 1000000,
306     D3D12_MAX_SHADER_VISIBLE_DESCRIPTOR_HEAP_SIZE_TIER_2 = 1000000,
307     D3D12_MAX_SHADER_VISIBLE_SAMPLER_HEAP_SIZE = 2048,
308     D3D12_MAX_TEXTURE_DIMENSION_2_TO_EXP = 17,
309     D3D12_MINOR_VERSION = 0,
310     D3D12_MIN_BORDER_COLOR_COMPONENT = 0f,
311     D3D12_MIN_DEPTH = 0f,
312     D3D12_MIN_MAXANISOTROPY = 0,
313     D3D12_MIP_LOD_BIAS_MAX = 1599f,
314     D3D12_MIP_LOD_BIAS_MIN = -160f,
315     D3D12_MIP_LOD_FRACTIONAL_BIT_COUNT = 8,
316     D3D12_MIP_LOD_RANGE_BIT_COUNT = 8,
317     D3D12_MULTISAMPLE_ANTIALIAS_LINE_WIDTH = 14f,
318     D3D12_NONSAMPLE_FETCH_OUT_OF_RANGE_ACCESS_RESULT = 0,
319     D3D12_OS_RESERVED_REGISTER_SPACE_VALUES_END = 0xffffffff,
320     D3D12_OS_RESERVED_REGISTER_SPACE_VALUES_START = 0xfffffff8,
321     D3D12_PACKED_TILE = 0xffffffff,
322     D3D12_PIXEL_ADDRESS_RANGE_BIT_COUNT = 15,
323     D3D12_PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT = 16,
324     D3D12_PS_CS_UAV_REGISTER_COMPONENTS = 1,
325     D3D12_PS_CS_UAV_REGISTER_COUNT = 8,
326     D3D12_PS_CS_UAV_REGISTER_READS_PER_INST = 1,
327     D3D12_PS_CS_UAV_REGISTER_READ_PORTS = 1,
328     D3D12_PS_FRONTFACING_DEFAULT_VALUE = 0xffffffff,
329     D3D12_PS_FRONTFACING_FALSE_VALUE = 0,
330     D3D12_PS_FRONTFACING_TRUE_VALUE = 0xffffffff,
331     D3D12_PS_INPUT_REGISTER_COMPONENTS = 4,
332     D3D12_PS_INPUT_REGISTER_COMPONENT_BIT_COUNT = 32,
333     D3D12_PS_INPUT_REGISTER_COUNT = 32,
334     D3D12_PS_INPUT_REGISTER_READS_PER_INST = 2,
335     D3D12_PS_INPUT_REGISTER_READ_PORTS = 1,
336     D3D12_PS_LEGACY_PIXEL_CENTER_FRACTIONAL_COMPONENT = 0f,
337     D3D12_PS_OUTPUT_DEPTH_REGISTER_COMPONENTS = 1,
338     D3D12_PS_OUTPUT_DEPTH_REGISTER_COMPONENT_BIT_COUNT = 32,
339     D3D12_PS_OUTPUT_DEPTH_REGISTER_COUNT = 1,
340     D3D12_PS_OUTPUT_MASK_REGISTER_COMPONENTS = 1,
341     D3D12_PS_OUTPUT_MASK_REGISTER_COMPONENT_BIT_COUNT = 32,
342     D3D12_PS_OUTPUT_MASK_REGISTER_COUNT = 1,
343     D3D12_PS_OUTPUT_REGISTER_COMPONENTS = 4,
344     D3D12_PS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32,
345     D3D12_PS_OUTPUT_REGISTER_COUNT = 8,
346     D3D12_PS_PIXEL_CENTER_FRACTIONAL_COMPONENT = 5f,
347     D3D12_RAW_UAV_SRV_BYTE_ALIGNMENT = 16,
348     D3D12_REQ_BLEND_OBJECT_COUNT_PER_DEVICE = 4096,
349     D3D12_REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP = 27,
350     D3D12_REQ_CONSTANT_BUFFER_ELEMENT_COUNT = 4096,
351     D3D12_REQ_DEPTH_STENCIL_OBJECT_COUNT_PER_DEVICE = 4096,
352     D3D12_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP = 32,
353     D3D12_REQ_DRAW_VERTEX_COUNT_2_TO_EXP = 32,
354     D3D12_REQ_FILTERING_HW_ADDRESSABLE_RESOURCE_DIMENSION = 16384,
355     D3D12_REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT = 1024,
356     D3D12_REQ_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT = 4096,
357     D3D12_REQ_MAXANISOTROPY = 16,
358     D3D12_REQ_MIP_LEVELS = 15,
359     D3D12_REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES = 2048,
360     D3D12_REQ_RASTERIZER_OBJECT_COUNT_PER_DEVICE = 4096,
361     D3D12_REQ_RENDER_TO_BUFFER_WINDOW_WIDTH = 16384,
362     D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_A_TERM = 128,
363     D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_B_TERM = 25f,
364     D3D12_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_C_TERM = 2048,
365     D3D12_REQ_RESOURCE_VIEW_COUNT_PER_DEVICE_2_TO_EXP = 20,
366     D3D12_REQ_SAMPLER_OBJECT_COUNT_PER_DEVICE = 4096,
367     D3D12_REQ_SUBRESOURCES = 30720,
368     D3D12_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION = 2048,
369     D3D12_REQ_TEXTURE1D_U_DIMENSION = 16384,
370     D3D12_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION = 2048,
371     D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION = 16384,
372     D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION = 2048,
373     D3D12_REQ_TEXTURECUBE_DIMENSION = 16384,
374     D3D12_RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL = 0,
375     D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES = 0xffffffff,
376     D3D12_SHADER_MAJOR_VERSION = 5,
377     D3D12_SHADER_MAX_INSTANCES = 65535,
378     D3D12_SHADER_MAX_INTERFACES = 253,
379     D3D12_SHADER_MAX_INTERFACE_CALL_SITES = 4096,
380     D3D12_SHADER_MAX_TYPES = 65535,
381     D3D12_SHADER_MINOR_VERSION = 1,
382     D3D12_SHIFT_INSTRUCTION_PAD_VALUE = 0,
383     D3D12_SHIFT_INSTRUCTION_SHIFT_VALUE_BIT_COUNT = 5,
384     D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT = 8,
385     D3D12_SMALL_MSAA_RESOURCE_PLACEMENT_ALIGNMENT = 65536,
386     D3D12_SMALL_RESOURCE_PLACEMENT_ALIGNMENT = 4096,
387     D3D12_SO_BUFFER_MAX_STRIDE_IN_BYTES = 2048,
388     D3D12_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES = 512,
389     D3D12_SO_BUFFER_SLOT_COUNT = 4,
390     D3D12_SO_DDI_REGISTER_INDEX_DENOTING_GAP = 0xffffffff,
391     D3D12_SO_NO_RASTERIZED_STREAM = 0xffffffff,
392     D3D12_SO_OUTPUT_COMPONENT_COUNT = 128,
393     D3D12_SO_STREAM_COUNT = 4,
394     D3D12_SPEC_DATE_DAY = 14,
395     D3D12_SPEC_DATE_MONTH = 11,
396     D3D12_SPEC_DATE_YEAR = 2014,
397     D3D12_SPEC_VERSION = 116 ,
398     D3D12_SRGB_GAMMA = 22f ,
399     D3D12_SRGB_TO_FLOAT_DENOMINATOR_1 = 1292f ,
400     D3D12_SRGB_TO_FLOAT_DENOMINATOR_2 = 1055f ,
401     D3D12_SRGB_TO_FLOAT_EXPONENT = 24f,
402     D3D12_SRGB_TO_FLOAT_OFFSET = 55f,
403     D3D12_SRGB_TO_FLOAT_THRESHOLD = 4045f,
404     D3D12_SRGB_TO_FLOAT_TOLERANCE_IN_ULP = 5f,
405     D3D12_STANDARD_COMPONENT_BIT_COUNT = 32,
406     D3D12_STANDARD_COMPONENT_BIT_COUNT_DOUBLED = 64,
407     D3D12_STANDARD_MAXIMUM_ELEMENT_ALIGNMENT_BYTE_MULTIPLE = 4,
408     D3D12_STANDARD_PIXEL_COMPONENT_COUNT = 128,
409     D3D12_STANDARD_PIXEL_ELEMENT_COUNT = 32,
410     D3D12_STANDARD_VECTOR_SIZE = 4,
411     D3D12_STANDARD_VERTEX_ELEMENT_COUNT = 32,
412     D3D12_STANDARD_VERTEX_TOTAL_COMPONENT_COUNT = 64,
413     D3D12_SUBPIXEL_FRACTIONAL_BIT_COUNT = 8,
414     D3D12_SUBTEXEL_FRACTIONAL_BIT_COUNT = 8,
415     D3D12_SYSTEM_RESERVED_REGISTER_SPACE_VALUES_END = 0xffffffff,
416     D3D12_SYSTEM_RESERVED_REGISTER_SPACE_VALUES_START = 0xfffffff0,
417     D3D12_TESSELLATOR_MAX_EVEN_TESSELLATION_FACTOR = 64,
418     D3D12_TESSELLATOR_MAX_ISOLINE_DENSITY_TESSELLATION_FACTOR = 64,
419     D3D12_TESSELLATOR_MAX_ODD_TESSELLATION_FACTOR = 63,
420     D3D12_TESSELLATOR_MAX_TESSELLATION_FACTOR = 64,
421     D3D12_TESSELLATOR_MIN_EVEN_TESSELLATION_FACTOR = 2,
422     D3D12_TESSELLATOR_MIN_ISOLINE_DENSITY_TESSELLATION_FACTOR = 1,
423     D3D12_TESSELLATOR_MIN_ODD_TESSELLATION_FACTOR = 1,
424     D3D12_TEXEL_ADDRESS_RANGE_BIT_COUNT = 16,
425     D3D12_TEXTURE_DATA_PITCH_ALIGNMENT = 256,
426     D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT = 512,
427     D3D12_TILED_RESOURCE_TILE_SIZE_IN_BYTES= 65536,
428     D3D12_UAV_COUNTER_PLACEMENT_ALIGNMENT = 4096,
429     D3D12_UAV_SLOT_COUNT = 64,
430     D3D12_UNBOUND_MEMORY_ACCESS_RESULT = 0,
431     D3D12_VIEWPORT_AND_SCISSORRECT_MAX_INDEX = 15,
432     D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE = 16,
433     D3D12_VIEWPORT_BOUNDS_MAX = 32767,
434     D3D12_VIEWPORT_BOUNDS_MIN = -32768,
435     D3D12_VS_INPUT_REGISTER_COMPONENTS = 4,
436     D3D12_VS_INPUT_REGISTER_COMPONENT_BIT_COUNT = 32,
437     D3D12_VS_INPUT_REGISTER_COUNT = 32,
438     D3D12_VS_INPUT_REGISTER_READS_PER_INST = 2,
439     D3D12_VS_INPUT_REGISTER_READ_PORTS = 1,
440     D3D12_VS_OUTPUT_REGISTER_COMPONENTS = 4,
441     D3D12_VS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32,
442     D3D12_VS_OUTPUT_REGISTER_COUNT = 32,
443     D3D12_WHQL_CONTEXT_COUNT_FOR_RESOURCE_LIMIT = 10,
444     D3D12_WHQL_DRAWINDEXED_INDEX_COUNT_2_TO_EXP = 25,
445     D3D12_WHQL_DRAW_VERTEX_COUNT_2_TO_EXP = 25
446 }
447 
448 alias UINT64 D3D12_GPU_VIRTUAL_ADDRESS;
449 
450 alias D3D12_COMMAND_LIST_TYPE = uint;
451 enum : D3D12_COMMAND_LIST_TYPE {
452     D3D12_COMMAND_LIST_TYPE_DIRECT  = 0,
453     D3D12_COMMAND_LIST_TYPE_BUNDLE  = 1,
454     D3D12_COMMAND_LIST_TYPE_COMPUTE = 2,
455     D3D12_COMMAND_LIST_TYPE_COPY    = 3
456 }
457 
458 alias D3D12_COMMAND_QUEUE_FLAGS = uint;
459 enum : D3D12_COMMAND_QUEUE_FLAGS {
460     D3D12_COMMAND_QUEUE_FLAG_NONE                = 0,
461     D3D12_COMMAND_QUEUE_FLAG_DISABLE_GPU_TIMEOUT = 0x1
462 }
463 
464 alias D3D12_COMMAND_QUEUE_PRIORITY = uint;
465 enum : D3D12_COMMAND_QUEUE_PRIORITY {
466     D3D12_COMMAND_QUEUE_PRIORITY_NORMAL = 0,
467     D3D12_COMMAND_QUEUE_PRIORITY_HIGH   = 100
468 }
469 
470 struct D3D12_COMMAND_QUEUE_DESC {
471 	this(this) {}
472     D3D12_COMMAND_LIST_TYPE   Type;
473     INT                       Priority;
474     D3D12_COMMAND_QUEUE_FLAGS Flags;
475     UINT                      NodeMask;
476 }
477 
478 alias D3D12_PRIMITIVE_TOPOLOGY_TYPE = uint;
479 enum : D3D12_PRIMITIVE_TOPOLOGY_TYPE {
480     D3D12_PRIMITIVE_TOPOLOGY_TYPE_UNDEFINED = 0,
481     D3D12_PRIMITIVE_TOPOLOGY_TYPE_POINT     = 1,
482     D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE      = 2,
483     D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE  = 3,
484     D3D12_PRIMITIVE_TOPOLOGY_TYPE_PATCH     = 4
485 }
486 
487 alias D3D12_INPUT_CLASSIFICATION = uint;
488 enum : D3D12_INPUT_CLASSIFICATION {
489     D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA   = 0,
490     D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA = 1
491 }
492 
493 struct D3D12_INPUT_ELEMENT_DESC {
494     LPCSTR                     SemanticName;
495     UINT                       SemanticIndex;
496     DXGI_FORMAT                Format;
497     UINT                       InputSlot;
498     UINT                       AlignedByteOffset;
499     D3D12_INPUT_CLASSIFICATION InputSlotClass;
500     UINT                       InstanceDataStepRate;
501 }
502 
503 alias D3D12_FILL_MODE = uint;
504 enum : D3D12_FILL_MODE {
505     D3D12_FILL_MODE_WIREFRAME = 2,
506     D3D12_FILL_MODE_SOLID     = 3
507 }
508 
509 alias D3D_PRIMITIVE_TOPOLOGY D3D12_PRIMITIVE_TOPOLOGY;
510 alias D3D_PRIMITIVE          D3D12_PRIMITIVE;
511 
512 alias D3D12_CULL_MODE = uint;
513 enum : D3D12_CULL_MODE {
514     D3D12_CULL_MODE_NONE  = 1,
515     D3D12_CULL_MODE_FRONT = 2,
516     D3D12_CULL_MODE_BACK  = 3
517 }
518 
519 struct D3D12_SO_DECLARATION_ENTRY {
520     UINT   Stream;
521     LPCSTR SemanticName;
522     UINT   SemanticIndex;
523     BYTE   StartComponent;
524     BYTE   ComponentCount;
525     BYTE   OutputSlot;
526 }
527 
528 struct D3D12_VIEWPORT {
529     FLOAT TopLeftX = 0.0f;
530     FLOAT TopLeftY = 0.0f;
531     FLOAT Width = 0.0f;
532     FLOAT Height = 0.0f;
533     FLOAT MinDepth = 0.0f;
534     FLOAT MaxDepth = 0.0f;
535 }
536 
537 alias RECT D3D12_RECT;
538 
539 struct D3D12_BOX {
540     UINT left;
541     UINT top;
542     UINT front;
543     UINT right;
544     UINT bottom;
545     UINT back;
546 }
547 
548 alias D3D12_COMPARISON_FUNC = uint;
549 enum : D3D12_COMPARISON_FUNC {
550     D3D12_COMPARISON_FUNC_NEVER         = 1,
551     D3D12_COMPARISON_FUNC_LESS          = 2,
552     D3D12_COMPARISON_FUNC_EQUAL         = 3,
553     D3D12_COMPARISON_FUNC_LESS_EQUAL    = 4,
554     D3D12_COMPARISON_FUNC_GREATER       = 5,
555     D3D12_COMPARISON_FUNC_NOT_EQUAL     = 6,
556     D3D12_COMPARISON_FUNC_GREATER_EQUAL = 7,
557     D3D12_COMPARISON_FUNC_ALWAYS        = 8
558 }
559 
560 alias D3D12_DEPTH_WRITE_MASK = uint;
561 enum : D3D12_DEPTH_WRITE_MASK {
562     D3D12_DEPTH_WRITE_MASK_ZERO = 0,
563     D3D12_DEPTH_WRITE_MASK_ALL  = 1
564 }
565 
566 alias D3D12_STENCIL_OP = uint;
567 enum : D3D12_STENCIL_OP {
568     D3D12_STENCIL_OP_KEEP     = 1,
569     D3D12_STENCIL_OP_ZERO     = 2,
570     D3D12_STENCIL_OP_REPLACE  = 3,
571     D3D12_STENCIL_OP_INCR_SAT = 4,
572     D3D12_STENCIL_OP_DECR_SAT = 5,
573     D3D12_STENCIL_OP_INVERT   = 6,
574     D3D12_STENCIL_OP_INCR     = 7,
575     D3D12_STENCIL_OP_DECR     = 8
576 }
577 
578 struct D3D12_DEPTH_STENCILOP_DESC {
579     D3D12_STENCIL_OP StencilFailOp;
580     D3D12_STENCIL_OP StencilDepthFailOp;
581     D3D12_STENCIL_OP StencilPassOp;
582     D3D12_COMPARISON_FUNC StencilFunc;
583 }
584 
585 struct D3D12_DEPTH_STENCIL_DESC {
586     BOOL DepthEnable;
587     D3D12_DEPTH_WRITE_MASK DepthWriteMask;
588     D3D12_COMPARISON_FUNC DepthFunc;
589     BOOL StencilEnable;
590     UINT8 StencilReadMask;
591     UINT8 StencilWriteMask;
592     D3D12_DEPTH_STENCILOP_DESC FrontFace;
593     D3D12_DEPTH_STENCILOP_DESC BackFace;
594 }
595 
596 alias D3D12_BLEND = uint;
597 enum : D3D12_BLEND {
598     D3D12_BLEND_ZERO             = 1,
599     D3D12_BLEND_ONE              = 2,
600     D3D12_BLEND_SRC_COLOR        = 3,
601     D3D12_BLEND_INV_SRC_COLOR    = 4,
602     D3D12_BLEND_SRC_ALPHA        = 5,
603     D3D12_BLEND_INV_SRC_ALPHA    = 6,
604     D3D12_BLEND_DEST_ALPHA       = 7,
605     D3D12_BLEND_INV_DEST_ALPHA   = 8,
606     D3D12_BLEND_DEST_COLOR       = 9,
607     D3D12_BLEND_INV_DEST_COLOR   = 10,
608     D3D12_BLEND_SRC_ALPHA_SAT    = 11,
609     D3D12_BLEND_BLEND_FACTOR     = 14,
610     D3D12_BLEND_INV_BLEND_FACTOR = 15,
611     D3D12_BLEND_SRC1_COLOR       = 16,
612     D3D12_BLEND_INV_SRC1_COLOR   = 17,
613     D3D12_BLEND_SRC1_ALPHA       = 18,
614     D3D12_BLEND_INV_SRC1_ALPHA   = 19
615 }
616 
617 alias D3D12_BLEND_OP = uint;
618 enum : D3D12_BLEND_OP {
619     D3D12_BLEND_OP_ADD          = 1,
620     D3D12_BLEND_OP_SUBTRACT     = 2,
621     D3D12_BLEND_OP_REV_SUBTRACT = 3,
622     D3D12_BLEND_OP_MIN          = 4,
623     D3D12_BLEND_OP_MAX          = 5
624 }
625 
626 alias D3D12_COLOR_WRITE_ENABLE = uint;
627 enum : D3D12_COLOR_WRITE_ENABLE {
628     D3D12_COLOR_WRITE_ENABLE_RED   = 1,
629     D3D12_COLOR_WRITE_ENABLE_GREEN = 2,
630     D3D12_COLOR_WRITE_ENABLE_BLUE  = 4,
631     D3D12_COLOR_WRITE_ENABLE_ALPHA = 8,
632     D3D12_COLOR_WRITE_ENABLE_ALL   = D3D12_COLOR_WRITE_ENABLE_RED   |
633         D3D12_COLOR_WRITE_ENABLE_GREEN |
634         D3D12_COLOR_WRITE_ENABLE_BLUE  |
635         D3D12_COLOR_WRITE_ENABLE_ALPHA
636 }
637 
638 alias D3D12_LOGIC_OP = uint;
639 enum : D3D12_LOGIC_OP {
640     D3D12_LOGIC_OP_CLEAR         = 0,
641     D3D12_LOGIC_OP_SET           = D3D12_LOGIC_OP_CLEAR         + 1,
642     D3D12_LOGIC_OP_COPY          = D3D12_LOGIC_OP_SET           + 1,
643     D3D12_LOGIC_OP_COPY_INVERTED = D3D12_LOGIC_OP_COPY          + 1,
644     D3D12_LOGIC_OP_NOOP          = D3D12_LOGIC_OP_COPY_INVERTED + 1,
645     D3D12_LOGIC_OP_INVERT        = D3D12_LOGIC_OP_NOOP          + 1,
646     D3D12_LOGIC_OP_AND           = D3D12_LOGIC_OP_INVERT        + 1,
647     D3D12_LOGIC_OP_NAND          = D3D12_LOGIC_OP_AND           + 1,
648     D3D12_LOGIC_OP_OR            = D3D12_LOGIC_OP_NAND          + 1,
649     D3D12_LOGIC_OP_NOR           = D3D12_LOGIC_OP_OR            + 1,
650     D3D12_LOGIC_OP_XOR           = D3D12_LOGIC_OP_NOR           + 1,
651     D3D12_LOGIC_OP_EQUIV         = D3D12_LOGIC_OP_XOR           + 1,
652     D3D12_LOGIC_OP_AND_REVERSE   = D3D12_LOGIC_OP_EQUIV         + 1,
653     D3D12_LOGIC_OP_AND_INVERTED  = D3D12_LOGIC_OP_AND_REVERSE   + 1,
654     D3D12_LOGIC_OP_OR_REVERSE    = D3D12_LOGIC_OP_AND_INVERTED  + 1,
655     D3D12_LOGIC_OP_OR_INVERTED   = D3D12_LOGIC_OP_OR_REVERSE    + 1
656 }
657 
658 struct D3D12_RENDER_TARGET_BLEND_DESC {
659     BOOL           BlendEnable;
660     BOOL           LogicOpEnable;
661     D3D12_BLEND    SrcBlend;
662     D3D12_BLEND    DestBlend;
663     D3D12_BLEND_OP BlendOp;
664     D3D12_BLEND    SrcBlendAlpha;
665     D3D12_BLEND    DestBlendAlpha;
666     D3D12_BLEND_OP BlendOpAlpha;
667     D3D12_LOGIC_OP LogicOp;
668     UINT8          RenderTargetWriteMask;
669 }
670 
671 struct D3D12_BLEND_DESC {
672     BOOL                              AlphaToCoverageEnable;
673     BOOL                              IndependentBlendEnable;
674     D3D12_RENDER_TARGET_BLEND_DESC[8] RenderTarget;
675 }
676 
677 alias D3D12_CONSERVATIVE_RASTERIZATION_MODE = uint;
678 enum : D3D12_CONSERVATIVE_RASTERIZATION_MODE {
679     D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF = 0,
680     D3D12_CONSERVATIVE_RASTERIZATION_MODE_ON  = 1
681 }
682 
683 // defaults from MSDN
684 struct D3D12_RASTERIZER_DESC {
685     D3D12_FILL_MODE                       FillMode = D3D12_FILL_MODE_SOLID;
686     D3D12_CULL_MODE                       CullMode = D3D12_CULL_MODE_BACK;
687     BOOL                                  FrontCounterClockwise = FALSE;
688     INT                                   DepthBias = 0;
689     FLOAT                                 DepthBiasClamp = 0.0f;
690     FLOAT                                 SlopeScaledDepthBias = 0.0f;
691     BOOL                                  DepthClipEnable = TRUE;
692     BOOL                                  MultisampleEnable = FALSE;
693     BOOL                                  AntialiasedLineEnable = FALSE;
694     UINT                                  ForcedSampleCount = 0;
695     D3D12_CONSERVATIVE_RASTERIZATION_MODE ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF;
696 }
697 
698 mixin(uuid!(ID3D12Object, "c4fec28f-7966-4e95-9f94-f431cb56c3b8"));
699 extern(C++) interface ID3D12Object : IUnknown {
700     HRESULT GetPrivateData(REFGUID guid,
701                            UINT* pDataSize,
702                            void* pData);
703 
704     HRESULT SetPrivateData(REFGUID guid,
705                            UINT DataSize,
706                            const(void)* pData);
707 
708     HRESULT SetPrivateDataInterface(REFGUID guid,
709                                     const IUnknown pData);
710 
711     HRESULT SetName(LPCWSTR Name);
712 }
713 
714 mixin(uuid!(ID3D12DeviceChild, "905db94b-a00c-4140-9df5-2b64ca9ea357"));
715 extern(C++) interface ID3D12DeviceChild : ID3D12Object {
716     HRESULT GetDevice(REFIID riid,
717                       void** ppvDevice);
718 }
719 
720 mixin(uuid!(ID3D12RootSignature, "c54a6b66-72df-4ee8-8be5-a946a1429214"));
721 extern(C++) interface ID3D12RootSignature : ID3D12DeviceChild {}
722 
723 struct D3D12_SHADER_BYTECODE {
724     const(void)* pShaderBytecode;
725     SIZE_T       BytecodeLength;
726 }
727 
728 struct D3D12_STREAM_OUTPUT_DESC {
729     const(D3D12_SO_DECLARATION_ENTRY)* pSODeclaration;
730     UINT                               NumEntries;
731     const(UINT)*                       pBufferStrides;
732     UINT                               NumStrides;
733     UINT                               RasterizedStream;
734 }
735 
736 struct D3D12_INPUT_LAYOUT_DESC {
737     const(D3D12_INPUT_ELEMENT_DESC)* pInputElementDescs;
738     UINT                             NumElements;
739 }
740 
741 alias D3D12_INDEX_BUFFER_STRIP_CUT_VALUE = uint;
742 enum : D3D12_INDEX_BUFFER_STRIP_CUT_VALUE {
743     D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_DISABLED   = 0,
744     D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFF     = 1,
745     D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFFFFFF = 2
746 }
747 
748 struct D3D12_CACHED_PIPELINE_STATE {
749     const(void)* pCachedBlob;
750     SIZE_T       CachedBlobSizeInBytes;
751 }
752 
753 alias D3D12_PIPELINE_STATE_FLAGS = uint;
754 enum : D3D12_PIPELINE_STATE_FLAGS {
755     D3D12_PIPELINE_STATE_FLAG_NONE       = 0,
756     D3D12_PIPELINE_STATE_FLAG_TOOL_DEBUG = 0x1
757 }
758 
759 struct D3D12_GRAPHICS_PIPELINE_STATE_DESC {
760     ID3D12RootSignature                pRootSignature;
761     D3D12_SHADER_BYTECODE              VS;
762     D3D12_SHADER_BYTECODE              PS;
763     D3D12_SHADER_BYTECODE              DS;
764     D3D12_SHADER_BYTECODE              HS;
765     D3D12_SHADER_BYTECODE              GS;
766     D3D12_STREAM_OUTPUT_DESC           StreamOutput;
767     D3D12_BLEND_DESC                   BlendState;
768     UINT                               SampleMask;
769     D3D12_RASTERIZER_DESC              RasterizerState;
770     D3D12_DEPTH_STENCIL_DESC           DepthStencilState;
771     D3D12_INPUT_LAYOUT_DESC            InputLayout;
772     D3D12_INDEX_BUFFER_STRIP_CUT_VALUE IBStripCutValue;
773     D3D12_PRIMITIVE_TOPOLOGY_TYPE      PrimitiveTopologyType;
774     UINT                               NumRenderTargets;
775     DXGI_FORMAT[8]                     RTVFormats;
776     DXGI_FORMAT                        DSVFormat;
777     DXGI_SAMPLE_DESC                   SampleDesc;
778     UINT                               NodeMask;
779     D3D12_CACHED_PIPELINE_STATE        CachedPSO;
780     D3D12_PIPELINE_STATE_FLAGS         Flags;
781 }
782 
783 struct D3D12_COMPUTE_PIPELINE_STATE_DESC {
784     ID3D12RootSignature         pRootSignature;
785     D3D12_SHADER_BYTECODE       CS;
786     UINT                        NodeMask;
787     D3D12_CACHED_PIPELINE_STATE CachedPSO;
788     D3D12_PIPELINE_STATE_FLAGS  Flags;
789 }
790 
791 alias D3D12_FEATURE = uint;
792 enum : D3D12_FEATURE {
793     D3D12_FEATURE_D3D12_OPTIONS               = 0,
794     D3D12_FEATURE_ARCHITECTURE                = D3D12_FEATURE_D3D12_OPTIONS  + 1,
795     D3D12_FEATURE_FEATURE_LEVELS              = D3D12_FEATURE_ARCHITECTURE   + 1,
796     D3D12_FEATURE_FORMAT_SUPPORT              = D3D12_FEATURE_FEATURE_LEVELS + 1,
797     D3D12_FEATURE_MULTISAMPLE_QUALITY_LEVELS  = D3D12_FEATURE_FORMAT_SUPPORT + 1,
798     D3D12_FEATURE_FORMAT_INFO                 = D3D12_FEATURE_MULTISAMPLE_QUALITY_LEVELS + 1,
799     D3D12_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT = D3D12_FEATURE_FORMAT_INFO    + 1
800 }
801 
802 alias D3D12_SHADER_MIN_PRECISION_SUPPORT = uint;
803 enum : D3D12_SHADER_MIN_PRECISION_SUPPORT {
804     D3D12_SHADER_MIN_PRECISION_SUPPORT_NONE   = 0,
805     D3D12_SHADER_MIN_PRECISION_SUPPORT_10_BIT = 0x1,
806     D3D12_SHADER_MIN_PRECISION_SUPPORT_16_BIT = 0x2
807 }
808 
809 alias D3D12_TILED_RESOURCES_TIER = uint;
810 enum : D3D12_TILED_RESOURCES_TIER {
811     D3D12_TILED_RESOURCES_TIER_NOT_SUPPORTED = 0,
812     D3D12_TILED_RESOURCES_TIER_1             = 1,
813     D3D12_TILED_RESOURCES_TIER_2             = 2,
814     D3D12_TILED_RESOURCES_TIER_3             = 3
815 }
816 
817 alias D3D12_RESOURCE_BINDING_TIER = uint;
818 enum : D3D12_RESOURCE_BINDING_TIER {
819     D3D12_RESOURCE_BINDING_TIER_1 = 1,
820     D3D12_RESOURCE_BINDING_TIER_2 = 2,
821     D3D12_RESOURCE_BINDING_TIER_3 = 3
822 }
823 
824 alias D3D12_CONSERVATIVE_RASTERIZATION_TIER = uint;
825 enum : D3D12_CONSERVATIVE_RASTERIZATION_TIER {
826     D3D12_CONSERVATIVE_RASTERIZATION_TIER_NOT_SUPPORTED = 0,
827     D3D12_CONSERVATIVE_RASTERIZATION_TIER_1             = 1,
828     D3D12_CONSERVATIVE_RASTERIZATION_TIER_2             = 2,
829     D3D12_CONSERVATIVE_RASTERIZATION_TIER_3             = 3
830 }
831 
832 alias D3D12_FORMAT_SUPPORT1 = uint;
833 enum : D3D12_FORMAT_SUPPORT1 {
834     D3D12_FORMAT_SUPPORT1_NONE                        = 0,
835     D3D12_FORMAT_SUPPORT1_BUFFER                      = 0x1,
836     D3D12_FORMAT_SUPPORT1_IA_VERTEX_BUFFER            = 0x2,
837     D3D12_FORMAT_SUPPORT1_IA_INDEX_BUFFER             = 0x4,
838     D3D12_FORMAT_SUPPORT1_SO_BUFFER                   = 0x8,
839     D3D12_FORMAT_SUPPORT1_TEXTURE1D                   = 0x10,
840     D3D12_FORMAT_SUPPORT1_TEXTURE2D                   = 0x20,
841     D3D12_FORMAT_SUPPORT1_TEXTURE3D                   = 0x40,
842     D3D12_FORMAT_SUPPORT1_TEXTURECUBE                 = 0x80,
843     D3D12_FORMAT_SUPPORT1_SHADER_LOAD                 = 0x100,
844     D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE               = 0x200,
845     D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE_COMPARISON    = 0x400,
846     D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE_MONO_TEXT     = 0x800,
847     D3D12_FORMAT_SUPPORT1_MIP                         = 0x1000,
848     D3D12_FORMAT_SUPPORT1_RENDER_TARGET               = 0x4000,
849     D3D12_FORMAT_SUPPORT1_BLENDABLE                   = 0x8000,
850     D3D12_FORMAT_SUPPORT1_DEPTH_STENCIL               = 0x10000,
851     D3D12_FORMAT_SUPPORT1_MULTISAMPLE_RESOLVE         = 0x40000,
852     D3D12_FORMAT_SUPPORT1_DISPLAY                     = 0x80000,
853     D3D12_FORMAT_SUPPORT1_CAST_WITHIN_BIT_LAYOUT      = 0x100000,
854     D3D12_FORMAT_SUPPORT1_MULTISAMPLE_RENDERTARGET    = 0x200000,
855     D3D12_FORMAT_SUPPORT1_MULTISAMPLE_LOAD            = 0x400000,
856     D3D12_FORMAT_SUPPORT1_SHADER_GATHER               = 0x800000,
857     D3D12_FORMAT_SUPPORT1_BACK_BUFFER_CAST            = 0x1000000,
858     D3D12_FORMAT_SUPPORT1_TYPED_UNORDERED_ACCESS_VIEW = 0x2000000,
859     D3D12_FORMAT_SUPPORT1_SHADER_GATHER_COMPARISON    = 0x4000000,
860     D3D12_FORMAT_SUPPORT1_DECODER_OUTPUT              = 0x8000000,
861     D3D12_FORMAT_SUPPORT1_VIDEO_PROCESSOR_OUTPUT      = 0x10000000,
862     D3D12_FORMAT_SUPPORT1_VIDEO_PROCESSOR_INPUT       = 0x20000000,
863     D3D12_FORMAT_SUPPORT1_VIDEO_ENCODER               = 0x40000000
864 }
865 
866 alias D3D12_FORMAT_SUPPORT2 = uint;
867 enum : D3D12_FORMAT_SUPPORT2 {
868     D3D12_FORMAT_SUPPORT2_NONE                                         = 0,
869     D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_ADD                               = 0x1,
870     D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_BITWISE_OPS                       = 0x2,
871     D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_COMPARE_STORE_OR_COMPARE_EXCHANGE = 0x4,
872     D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_EXCHANGE                          = 0x8,
873     D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_SIGNED_MIN_OR_MAX                 = 0x10,
874     D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_UNSIGNED_MIN_OR_MAX               = 0x20,
875     D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD                               = 0x40,
876     D3D12_FORMAT_SUPPORT2_UAV_TYPED_STORE                              = 0x80,
877     D3D12_FORMAT_SUPPORT2_OUTPUT_MERGER_LOGIC_OP                       = 0x100,
878     D3D12_FORMAT_SUPPORT2_TILED                                        = 0x200,
879     D3D12_FORMAT_SUPPORT2_MULTIPLANE_OVERLAY                           = 0x4000
880 }
881 
882 alias D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS = uint;
883 enum : D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS {
884     D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG_NONE           = 0,
885     D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG_TILED_RESOURCE = 0x1
886 }
887 
888 alias D3D12_CROSS_NODE_SHARING_TIER = uint;
889 enum : D3D12_CROSS_NODE_SHARING_TIER {
890     D3D12_CROSS_NODE_SHARING_TIER_NOT_SUPPORTED = 0,
891     D3D12_CROSS_NODE_SHARING_TIER_1_EMULATED    = 1,
892     D3D12_CROSS_NODE_SHARING_TIER_1             = 2,
893     D3D12_CROSS_NODE_SHARING_TIER_2             = 3
894 }
895 
896 alias D3D12_RESOURCE_HEAP_TIER = uint;
897 enum : D3D12_RESOURCE_HEAP_TIER {
898     D3D12_RESOURCE_HEAP_TIER_1 = 1,
899     D3D12_RESOURCE_HEAP_TIER_2 = 2
900 }
901 
902 struct D3D12_FEATURE_DATA_D3D12_OPTIONS {
903     BOOL                                  DoublePrecisionFloatShaderOps;
904     BOOL                                  OutputMergerLogicOp;
905     D3D12_SHADER_MIN_PRECISION_SUPPORT    MinPrecisionSupport;
906     D3D12_TILED_RESOURCES_TIER            TiledResourcesTier;
907     D3D12_RESOURCE_BINDING_TIER           ResourceBindingTier;
908     BOOL                                  PSSpecifiedStencilRefSupported;
909     BOOL                                  TypedUAVLoadAdditionalFormats;
910     BOOL                                  ROVsSupported;
911     D3D12_CONSERVATIVE_RASTERIZATION_TIER ConservativeRasterizationTier;
912     UINT                                  MaxGPUVirtualAddressBitsPerResource;
913     BOOL                                  StandardSwizzle64KBSupported;
914     D3D12_CROSS_NODE_SHARING_TIER         CrossNodeSharingTier;
915     BOOL                                  CrossAdapterRowMajorTextureSupported;
916     BOOL                                  VPAndRTArrayIndexFromAnyShaderFeedingRasterizerSupportedWithoutGSEmulation;
917     D3D12_RESOURCE_HEAP_TIER              ResourceHeapTier;
918 }
919 
920 struct D3D12_FEATURE_DATA_ARCHITECTURE {
921     UINT NodeIndex;
922     BOOL TileBasedRenderer;
923     BOOL UMA;
924     BOOL CacheCoherentUMA;
925 }
926 
927 struct D3D12_FEATURE_DATA_FEATURE_LEVELS {
928     UINT                      NumFeatureLevels;
929     const(D3D_FEATURE_LEVEL)* pFeatureLevelsRequested;
930     D3D_FEATURE_LEVEL         MaxSupportedFeatureLevel;
931 }
932 
933 struct D3D12_FEATURE_DATA_FORMAT_SUPPORT {
934     DXGI_FORMAT           Format;
935     D3D12_FORMAT_SUPPORT1 Support1;
936     D3D12_FORMAT_SUPPORT2 Support2;
937 }
938 
939 struct D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS {
940     DXGI_FORMAT                           Format;
941     UINT                                  SampleCount;
942     D3D12_MULTISAMPLE_QUALITY_LEVEL_FLAGS Flags;
943     UINT                                  NumQualityLevels;
944 }
945 
946 struct D3D12_FEATURE_DATA_FORMAT_INFO {
947     DXGI_FORMAT Format;
948     UINT8       PlaneCount;
949 }
950 
951 struct D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT {
952     UINT MaxGPUVirtualAddressBitsPerResource;
953     UINT MaxGPUVirtualAddressBitsPerProcess;
954 }
955 
956 struct D3D12_RESOURCE_ALLOCATION_INFO {
957 	this(this) {}
958     UINT64 SizeInBytes;
959     UINT64 Alignment;
960 }
961 
962 alias D3D12_HEAP_TYPE = uint;
963 enum : D3D12_HEAP_TYPE {
964     D3D12_HEAP_TYPE_DEFAULT = 1,
965     D3D12_HEAP_TYPE_UPLOAD  = 2,
966     D3D12_HEAP_TYPE_READBACK        = 3,
967     D3D12_HEAP_TYPE_CUSTOM  = 4
968 }
969 
970 alias D3D12_CPU_PAGE_PROPERTY = uint;
971 enum : D3D12_CPU_PAGE_PROPERTY {
972     D3D12_CPU_PAGE_PROPERTY_UNKNOWN = 0,
973     D3D12_CPU_PAGE_PROPERTY_NOT_AVAILABLE   = 1,
974     D3D12_CPU_PAGE_PROPERTY_WRITE_COMBINE   = 2,
975     D3D12_CPU_PAGE_PROPERTY_WRITE_BACK      = 3
976 }
977 
978 alias D3D12_MEMORY_POOL = uint;
979 enum : D3D12_MEMORY_POOL {
980     D3D12_MEMORY_POOL_UNKNOWN = 0,
981     D3D12_MEMORY_POOL_L0      = 1,
982     D3D12_MEMORY_POOL_L1      = 2
983 }
984 
985 struct D3D12_HEAP_PROPERTIES {
986 	this(this) {}
987     D3D12_HEAP_TYPE         Type;
988     D3D12_CPU_PAGE_PROPERTY CPUPageProperty;
989     D3D12_MEMORY_POOL       MemoryPoolPreference;
990     UINT                    CreationNodeMask;
991     UINT                    VisibleNodeMask;
992 }
993 
994 alias D3D12_HEAP_FLAGS = uint;
995 enum : D3D12_HEAP_FLAGS {
996     D3D12_HEAP_FLAG_NONE                           = 0,
997     D3D12_HEAP_FLAG_SHARED                         = 0x1,
998     D3D12_HEAP_FLAG_DENY_BUFFERS                   = 0x4,
999     D3D12_HEAP_FLAG_ALLOW_DISPLAY                  = 0x8,
1000     D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER           = 0x20,
1001     D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES            = 0x40,
1002     D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES        = 0x80,
1003     D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES = 0,
1004     D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS             = 0xc0,
1005     D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES  = 0x44,
1006     D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES      = 0x84
1007 }
1008 
1009 struct D3D12_HEAP_DESC {
1010 	this(this) {}
1011     UINT64                SizeInBytes;
1012     D3D12_HEAP_PROPERTIES Properties;
1013     UINT64                Alignment;
1014     D3D12_HEAP_FLAGS      Flags;
1015 }
1016 
1017 alias D3D12_RESOURCE_DIMENSION = uint;
1018 enum : D3D12_RESOURCE_DIMENSION {
1019     D3D12_RESOURCE_DIMENSION_UNKNOWN   = 0,
1020     D3D12_RESOURCE_DIMENSION_BUFFER    = 1,
1021     D3D12_RESOURCE_DIMENSION_TEXTURE1D = 2,
1022     D3D12_RESOURCE_DIMENSION_TEXTURE2D = 3,
1023     D3D12_RESOURCE_DIMENSION_TEXTURE3D = 4
1024 }
1025 
1026 alias D3D12_TEXTURE_LAYOUT = uint;
1027 enum : D3D12_TEXTURE_LAYOUT {
1028     D3D12_TEXTURE_LAYOUT_UNKNOWN                = 0,
1029     D3D12_TEXTURE_LAYOUT_ROW_MAJOR              = 1,
1030     D3D12_TEXTURE_LAYOUT_64KB_UNDEFINED_SWIZZLE = 2,
1031     D3D12_TEXTURE_LAYOUT_64KB_STANDARD_SWIZZLE  = 3
1032 }
1033 
1034 alias D3D12_RESOURCE_FLAGS = uint;
1035 enum : D3D12_RESOURCE_FLAGS {
1036     D3D12_RESOURCE_FLAG_NONE                      = 0,
1037     D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET       = 0x1,
1038     D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL       = 0x2,
1039     D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS    = 0x4,
1040     D3D12_RESOURCE_FLAG_DENY_SHADER_RESOURCE      = 0x8,
1041     D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER       = 0x10,
1042     D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS = 0x20
1043 }
1044 
1045 struct D3D12_RESOURCE_DESC {
1046 	this(this) {}
1047     D3D12_RESOURCE_DIMENSION Dimension;
1048     UINT64                   Alignment;
1049     UINT64                   Width;
1050     UINT                     Height;
1051     UINT16                   DepthOrArraySize;
1052     UINT16                   MipLevels;
1053     DXGI_FORMAT              Format;
1054     DXGI_SAMPLE_DESC         SampleDesc;
1055     D3D12_TEXTURE_LAYOUT     Layout;
1056     D3D12_RESOURCE_FLAGS     Flags;
1057 }
1058 
1059 struct D3D12_DEPTH_STENCIL_VALUE {
1060     FLOAT Depth = 0.0f;
1061     UINT8 Stencil;
1062 }
1063 
1064 struct D3D12_CLEAR_VALUE {
1065     DXGI_FORMAT Format;
1066     union {
1067         FLOAT[4]                  Color;
1068         D3D12_DEPTH_STENCIL_VALUE DepthStencil;
1069     }
1070 }
1071 
1072 struct D3D12_RANGE {
1073     SIZE_T Begin;
1074     SIZE_T End;
1075 }
1076 
1077 struct D3D12_SUBRESOURCE_INFO {
1078     UINT64 Offset;
1079     UINT   RowPitch;
1080     UINT   DepthPitch;
1081 }
1082 
1083 struct D3D12_TILED_RESOURCE_COORDINATE {
1084     UINT X;
1085     UINT Y;
1086     UINT Z;
1087     UINT Subresource;
1088 }
1089 
1090 struct D3D12_TILE_REGION_SIZE {
1091     UINT   NumTiles;
1092     BOOL   UseBox;
1093     UINT   Width;
1094     UINT16 Height;
1095     UINT16 Depth;
1096 }
1097 
1098 alias D3D12_TILE_RANGE_FLAGS = uint;
1099 enum : D3D12_TILE_RANGE_FLAGS {
1100     D3D12_TILE_RANGE_FLAG_NONE              = 0,
1101     D3D12_TILE_RANGE_FLAG_NULL              = 1,
1102     D3D12_TILE_RANGE_FLAG_SKIP              = 2,
1103     D3D12_TILE_RANGE_FLAG_REUSE_SINGLE_TILE = 4
1104 }
1105 
1106 struct D3D12_SUBRESOURCE_TILING {
1107     UINT   WidthInTiles;
1108     UINT16 HeightInTiles;
1109     UINT16 DepthInTiles;
1110     UINT   StartTileIndexInOverallResource;
1111 }
1112 
1113 struct D3D12_TILE_SHAPE {
1114     UINT WidthInTexels;
1115     UINT HeightInTexels;
1116     UINT DepthInTexels;
1117 }
1118 
1119 struct D3D12_PACKED_MIP_INFO {
1120     UINT8 NumStandardMips;
1121     UINT8 NumPackedMips;
1122     UINT  NumTilesForPackedMips;
1123     UINT  StartTileIndexInOverallResource;
1124 }
1125 
1126 alias D3D12_TILE_MAPPING_FLAGS = uint;
1127 enum : D3D12_TILE_MAPPING_FLAGS {
1128     D3D12_TILE_MAPPING_FLAG_NONE      = 0,
1129     D3D12_TILE_MAPPING_FLAG_NO_HAZARD = 0x1
1130 }
1131 
1132 alias D3D12_TILE_COPY_FLAGS = uint;
1133 enum : D3D12_TILE_COPY_FLAGS {
1134     D3D12_TILE_COPY_FLAG_NONE                                     = 0,
1135     D3D12_TILE_COPY_FLAG_NO_HAZARD                                = 0x1,
1136     D3D12_TILE_COPY_FLAG_LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE = 0x2,
1137     D3D12_TILE_COPY_FLAG_SWIZZLED_TILED_RESOURCE_TO_LINEAR_BUFFER = 0x4
1138 }
1139 
1140 alias D3D12_RESOURCE_STATES = uint;
1141 enum : D3D12_RESOURCE_STATES {
1142     D3D12_RESOURCE_STATE_COMMON                     = 0,
1143     D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER = 0x1,
1144     D3D12_RESOURCE_STATE_INDEX_BUFFER               = 0x2,
1145     D3D12_RESOURCE_STATE_RENDER_TARGET              = 0x4,
1146     D3D12_RESOURCE_STATE_UNORDERED_ACCESS           = 0x8,
1147     D3D12_RESOURCE_STATE_DEPTH_WRITE                = 0x10,
1148     D3D12_RESOURCE_STATE_DEPTH_READ                 = 0x20,
1149     D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE  = 0x40,
1150     D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE      = 0x80,
1151     D3D12_RESOURCE_STATE_STREAM_OUT                 = 0x100,
1152     D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT          = 0x200,
1153     D3D12_RESOURCE_STATE_COPY_DEST                  = 0x400,
1154     D3D12_RESOURCE_STATE_COPY_SOURCE                = 0x800,
1155     D3D12_RESOURCE_STATE_RESOLVE_DEST               = 0x1000,
1156     D3D12_RESOURCE_STATE_RESOLVE_SOURCE             = 0x2000,
1157     D3D12_RESOURCE_STATE_GENERIC_READ               = 0x1 | 0x2 | 0x40 | 0x80 | 0x200 | 0x800,
1158     D3D12_RESOURCE_STATE_PRESENT                    = 0,
1159     D3D12_RESOURCE_STATE_PREDICATION                = 0x200
1160 }
1161 
1162 alias D3D12_RESOURCE_BARRIER_TYPE = uint;
1163 enum : D3D12_RESOURCE_BARRIER_TYPE {
1164     D3D12_RESOURCE_BARRIER_TYPE_TRANSITION = 0,
1165     D3D12_RESOURCE_BARRIER_TYPE_ALIASING   = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION + 1,
1166     D3D12_RESOURCE_BARRIER_TYPE_UAV        = D3D12_RESOURCE_BARRIER_TYPE_ALIASING   + 1
1167 }
1168 
1169 
1170 struct D3D12_RESOURCE_TRANSITION_BARRIER {
1171     ID3D12Resource        pResource;
1172     UINT                  Subresource;
1173     D3D12_RESOURCE_STATES StateBefore;
1174     D3D12_RESOURCE_STATES StateAfter;
1175 }
1176 
1177 struct D3D12_RESOURCE_ALIASING_BARRIER {
1178     ID3D12Resource pResourceBefore;
1179     ID3D12Resource pResourceAfter;
1180 }
1181 
1182 struct D3D12_RESOURCE_UAV_BARRIER {
1183     ID3D12Resource pResource;
1184 }
1185 
1186 alias D3D12_RESOURCE_BARRIER_FLAGS = uint;
1187 enum : D3D12_RESOURCE_BARRIER_FLAGS {
1188     D3D12_RESOURCE_BARRIER_FLAG_NONE       = 0,
1189     D3D12_RESOURCE_BARRIER_FLAG_BEGIN_ONLY = 0x1,
1190     D3D12_RESOURCE_BARRIER_FLAG_END_ONLY   = 0x2
1191 }
1192 
1193 struct D3D12_RESOURCE_BARRIER {
1194     D3D12_RESOURCE_BARRIER_TYPE  Type;
1195     D3D12_RESOURCE_BARRIER_FLAGS Flags;
1196     union {
1197         D3D12_RESOURCE_TRANSITION_BARRIER Transition;
1198         D3D12_RESOURCE_ALIASING_BARRIER   Aliasing;
1199         D3D12_RESOURCE_UAV_BARRIER        UAV;
1200     }
1201 }
1202 
1203 struct D3D12_SUBRESOURCE_FOOTPRINT {
1204     DXGI_FORMAT Format;
1205     UINT        Width;
1206     UINT        Height;
1207     UINT        Depth;
1208     UINT        RowPitch;
1209 }
1210 
1211 struct D3D12_PLACED_SUBRESOURCE_FOOTPRINT {
1212     UINT64                      Offset;
1213     D3D12_SUBRESOURCE_FOOTPRINT Footprint;
1214 }
1215 
1216 alias D3D12_TEXTURE_COPY_TYPE = uint;
1217 enum : D3D12_TEXTURE_COPY_TYPE {
1218     D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX = 0,
1219     D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT  = 1
1220 }
1221 
1222 struct D3D12_TEXTURE_COPY_LOCATION {
1223     ID3D12Resource          pResource;
1224     D3D12_TEXTURE_COPY_TYPE Type;
1225     union {
1226         D3D12_PLACED_SUBRESOURCE_FOOTPRINT PlacedFootprint;
1227         UINT                               SubresourceIndex;
1228     }
1229 }
1230 
1231 alias D3D12_SHADER_COMPONENT_MAPPING = uint;
1232 enum : D3D12_SHADER_COMPONENT_MAPPING {
1233     D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_0 = 0,
1234     D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_1 = 1,
1235     D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_2 = 2,
1236     D3D12_SHADER_COMPONENT_MAPPING_FROM_MEMORY_COMPONENT_3 = 3,
1237     D3D12_SHADER_COMPONENT_MAPPING_FORCE_VALUE_0           = 4,
1238     D3D12_SHADER_COMPONENT_MAPPING_FORCE_VALUE_1           = 5
1239 }
1240 
1241 enum {
1242     D3D12_SHADER_COMPONENT_MAPPING_MASK  = 0x7,
1243     D3D12_SHADER_COMPONENT_MAPPING_SHIFT = 3,
1244     D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES =
1245         1 << (D3D12_SHADER_COMPONENT_MAPPING_SHIFT * 4),
1246     D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING =
1247         D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING(0, 1, 2, 3)
1248 }
1249 
1250 pure nothrow @nogc @safe {
1251     uint D3D12_ENCODE_SHADER_4_COMPONENT_MAPPING(uint Src0, uint Src1,
1252                                                  uint Src2, uint Src3)
1253     {
1254         return ( (Src0 & D3D12_SHADER_COMPONENT_MAPPING_MASK) |
1255                 ((Src1 & D3D12_SHADER_COMPONENT_MAPPING_MASK) <<
1256                  D3D12_SHADER_COMPONENT_MAPPING_SHIFT) |
1257                 ((Src2 & D3D12_SHADER_COMPONENT_MAPPING_MASK) <<
1258                  (D3D12_SHADER_COMPONENT_MAPPING_SHIFT * 2)) |
1259                 ((Src3 & D3D12_SHADER_COMPONENT_MAPPING_MASK) <<
1260                  (D3D12_SHADER_COMPONENT_MAPPING_SHIFT * 3)) |
1261                 D3D12_SHADER_COMPONENT_MAPPING_ALWAYS_SET_BIT_AVOIDING_ZEROMEM_MISTAKES);
1262     }
1263 
1264     uint D3D12_DECODE_SHADER_4_COMPONENT_MAPPING(uint ComponentToExtract,
1265                                                  uint Mapping)
1266     {
1267         return cast(D3D12_SHADER_COMPONENT_MAPPING)
1268             (Mapping >>
1269              (D3D12_SHADER_COMPONENT_MAPPING_SHIFT * ComponentToExtract) &
1270              D3D12_SHADER_COMPONENT_MAPPING_MASK);
1271     }
1272 }
1273 
1274 alias D3D12_BUFFER_SRV_FLAGS = uint;
1275 enum : D3D12_BUFFER_SRV_FLAGS {
1276     D3D12_BUFFER_SRV_FLAG_NONE = 0,
1277     D3D12_BUFFER_SRV_FLAG_RAW  = 0x1
1278 }
1279 
1280 struct D3D12_BUFFER_SRV {
1281     UINT64                 FirstElement;
1282     UINT                   NumElements;
1283     UINT                   StructureByteStride;
1284     D3D12_BUFFER_SRV_FLAGS Flags;
1285 }
1286 
1287 struct D3D12_TEX1D_SRV {
1288     UINT  MostDetailedMip;
1289     UINT  MipLevels;
1290     FLOAT ResourceMinLODClamp = 0.0f;
1291 }
1292 
1293 struct D3D12_TEX1D_ARRAY_SRV {
1294     UINT  MostDetailedMip;
1295     UINT  MipLevels;
1296     UINT  FirstArraySlice;
1297     UINT  ArraySize;
1298     FLOAT ResourceMinLODClamp = 0.0f;
1299 }
1300 
1301 struct D3D12_TEX2D_SRV {
1302     UINT  MostDetailedMip;
1303     UINT  MipLevels;
1304     UINT  PlaneSlice;
1305     FLOAT ResourceMinLODClamp = 0.0f;
1306 }
1307 
1308 struct D3D12_TEX2D_ARRAY_SRV {
1309     UINT  MostDetailedMip;
1310     UINT  MipLevels;
1311     UINT  FirstArraySlice;
1312     UINT  ArraySize;
1313     UINT  PlaneSlice;
1314     FLOAT ResourceMinLODClamp = 0.0f;
1315 }
1316 
1317 struct D3D12_TEX3D_SRV {
1318     UINT  MostDetailedMip;
1319     UINT  MipLevels;
1320     FLOAT ResourceMinLODClamp = 0.0f;
1321 }
1322 
1323 struct D3D12_TEXCUBE_SRV {
1324     UINT  MostDetailedMip;
1325     UINT  MipLevels;
1326     FLOAT ResourceMinLODClamp = 0.0f;
1327 }
1328 
1329 struct D3D12_TEXCUBE_ARRAY_SRV {
1330     UINT  MostDetailedMip;
1331     UINT  MipLevels;
1332     UINT  First2DArrayFace;
1333     UINT  NumCubes;
1334     FLOAT ResourceMinLODClamp = 0.0f;
1335 }
1336 
1337 struct D3D12_TEX2DMS_SRV {
1338     UINT UnusedField_NothingToDefine;
1339 }
1340 
1341 struct D3D12_TEX2DMS_ARRAY_SRV {
1342     UINT FirstArraySlice;
1343     UINT ArraySize;
1344 }
1345 
1346 alias D3D12_SRV_DIMENSION = uint;
1347 enum : D3D12_SRV_DIMENSION {
1348     D3D12_SRV_DIMENSION_UNKNOWN          = 0,
1349     D3D12_SRV_DIMENSION_BUFFER           = 1,
1350     D3D12_SRV_DIMENSION_TEXTURE1D        = 2,
1351     D3D12_SRV_DIMENSION_TEXTURE1DARRAY   = 3,
1352     D3D12_SRV_DIMENSION_TEXTURE2D        = 4,
1353     D3D12_SRV_DIMENSION_TEXTURE2DARRAY   = 5,
1354     D3D12_SRV_DIMENSION_TEXTURE2DMS      = 6,
1355     D3D12_SRV_DIMENSION_TEXTURE2DMSARRAY = 7,
1356     D3D12_SRV_DIMENSION_TEXTURE3D        = 8,
1357     D3D12_SRV_DIMENSION_TEXTURECUBE      = 9,
1358     D3D12_SRV_DIMENSION_TEXTURECUBEARRAY = 10
1359 }
1360 
1361 struct D3D12_SHADER_RESOURCE_VIEW_DESC {
1362     DXGI_FORMAT         Format;
1363     D3D12_SRV_DIMENSION ViewDimension;
1364     UINT                Shader4ComponentMapping;
1365     union
1366     {
1367         D3D12_BUFFER_SRV        Buffer;
1368         D3D12_TEX1D_SRV         Texture1D;
1369         D3D12_TEX1D_ARRAY_SRV   Texture1DArray;
1370         D3D12_TEX2D_SRV         Texture2D;
1371         D3D12_TEX2D_ARRAY_SRV   Texture2DArray;
1372         D3D12_TEX2DMS_SRV       Texture2DMS;
1373         D3D12_TEX2DMS_ARRAY_SRV Texture2DMSArray;
1374         D3D12_TEX3D_SRV         Texture3D;
1375         D3D12_TEXCUBE_SRV       TextureCube;
1376         D3D12_TEXCUBE_ARRAY_SRV TextureCubeArray;
1377     }
1378 }
1379 
1380 struct D3D12_CONSTANT_BUFFER_VIEW_DESC {
1381     D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
1382     UINT                      SizeInBytes;
1383 }
1384 
1385 alias D3D12_FILTER = uint;
1386 enum : D3D12_FILTER {
1387     D3D12_FILTER_MIN_MAG_MIP_POINT                          = 0,
1388     D3D12_FILTER_MIN_MAG_POINT_MIP_LINEAR                   = 0x1,
1389     D3D12_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT             = 0x4,
1390     D3D12_FILTER_MIN_POINT_MAG_MIP_LINEAR                   = 0x5,
1391     D3D12_FILTER_MIN_LINEAR_MAG_MIP_POINT                   = 0x10,
1392     D3D12_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR            = 0x11,
1393     D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT                   = 0x14,
1394     D3D12_FILTER_MIN_MAG_MIP_LINEAR                         = 0x15,
1395     D3D12_FILTER_ANISOTROPIC                                = 0x55,
1396     D3D12_FILTER_COMPARISON_MIN_MAG_MIP_POINT               = 0x80,
1397     D3D12_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR        = 0x81,
1398     D3D12_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT  = 0x84,
1399     D3D12_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR        = 0x85,
1400     D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT        = 0x90,
1401     D3D12_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x91,
1402     D3D12_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT        = 0x94,
1403     D3D12_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR              = 0x95,
1404     D3D12_FILTER_COMPARISON_ANISOTROPIC                     = 0xd5,
1405     D3D12_FILTER_MINIMUM_MIN_MAG_MIP_POINT                  = 0x100,
1406     D3D12_FILTER_MINIMUM_MIN_MAG_POINT_MIP_LINEAR           = 0x101,
1407     D3D12_FILTER_MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT     = 0x104,
1408     D3D12_FILTER_MINIMUM_MIN_POINT_MAG_MIP_LINEAR           = 0x105,
1409     D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_MIP_POINT           = 0x110,
1410     D3D12_FILTER_MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR    = 0x111,
1411     D3D12_FILTER_MINIMUM_MIN_MAG_LINEAR_MIP_POINT           = 0x114,
1412     D3D12_FILTER_MINIMUM_MIN_MAG_MIP_LINEAR                 = 0x115,
1413     D3D12_FILTER_MINIMUM_ANISOTROPIC                        = 0x155,
1414     D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_POINT                  = 0x180,
1415     D3D12_FILTER_MAXIMUM_MIN_MAG_POINT_MIP_LINEAR           = 0x181,
1416     D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT     = 0x184,
1417     D3D12_FILTER_MAXIMUM_MIN_POINT_MAG_MIP_LINEAR           = 0x185,
1418     D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_MIP_POINT           = 0x190,
1419     D3D12_FILTER_MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR    = 0x191,
1420     D3D12_FILTER_MAXIMUM_MIN_MAG_LINEAR_MIP_POINT           = 0x194,
1421     D3D12_FILTER_MAXIMUM_MIN_MAG_MIP_LINEAR                 = 0x195,
1422     D3D12_FILTER_MAXIMUM_ANISOTROPIC                        = 0x1d5
1423 }
1424 
1425 alias D3D12_FILTER_TYPE = uint;
1426 enum : D3D12_FILTER_TYPE {
1427     D3D12_FILTER_TYPE_POINT  = 0,
1428     D3D12_FILTER_TYPE_LINEAR = 1
1429 }
1430 
1431 alias D3D12_FILTER_REDUCTION_TYPE = uint;
1432 enum : D3D12_FILTER_REDUCTION_TYPE {
1433     D3D12_FILTER_REDUCTION_TYPE_STANDARD   = 0,
1434     D3D12_FILTER_REDUCTION_TYPE_COMPARISON = 1,
1435     D3D12_FILTER_REDUCTION_TYPE_MINIMUM    = 2,
1436     D3D12_FILTER_REDUCTION_TYPE_MAXIMUM    = 3
1437 }
1438 
1439 enum {
1440     D3D12_FILTER_REDUCTION_TYPE_MASK  = 0x3,
1441     D3D12_FILTER_REDUCTION_TYPE_SHIFT = 7,
1442     D3D12_FILTER_TYPE_MASK            = 0x3,
1443     D3D12_MIN_FILTER_SHIFT            = 4,
1444     D3D12_MAG_FILTER_SHIFT            = 2,
1445     D3D12_MIP_FILTER_SHIFT            = 0,
1446     D3D12_ANISOTROPIC_FILTERING_BIT   = 0x40
1447 }
1448 
1449 pure nothrow @safe @nogc {
1450     D3D12_FILTER D3D12_ENCODE_BASIC_FILTER(D3D12_FILTER_TYPE min,
1451                                            D3D12_FILTER_TYPE mag,
1452                                            D3D12_FILTER_TYPE mip,
1453                                            D3D12_FILTER_REDUCTION_TYPE reduction)
1454     {
1455         return cast(D3D12_FILTER)
1456             (((min       & D3D12_FILTER_TYPE_MASK) << D3D12_MIN_FILTER_SHIFT ) |
1457              ((mag       & D3D12_FILTER_TYPE_MASK) << D3D12_MAG_FILTER_SHIFT ) |
1458              ((mip       & D3D12_FILTER_TYPE_MASK) << D3D12_MIP_FILTER_SHIFT ) |
1459              ((reduction & D3D12_FILTER_REDUCTION_TYPE_MASK) <<
1460               D3D12_FILTER_REDUCTION_TYPE_SHIFT));
1461     }
1462 
1463     D3D12_FILTER D3D12_ENCODE_ANISOTROPIC_FILTER(D3D12_FILTER_REDUCTION_TYPE reduction) {
1464         return cast(D3D12_FILTER)
1465             (D3D12_ANISOTROPIC_FILTERING_BIT |
1466              D3D12_ENCODE_BASIC_FILTER(D3D12_FILTER_TYPE_LINEAR,
1467                                        D3D12_FILTER_TYPE_LINEAR,
1468                                        D3D12_FILTER_TYPE_LINEAR,
1469                                        reduction));
1470     }
1471 
1472     D3D12_FILTER_TYPE D3D12_DECODE_MIN_FILTER(D3D12_FILTER D3D12Filter) {
1473         return cast(D3D12_FILTER_TYPE)
1474             ((D3D12Filter >> D3D12_MIN_FILTER_SHIFT) & D3D12_FILTER_TYPE_MASK);
1475     }
1476 
1477     D3D12_FILTER_TYPE D3D12_DECODE_MAG_FILTER(D3D12_FILTER D3D12Filter) {
1478         return cast(D3D12_FILTER_TYPE)
1479             ((D3D12Filter >> D3D12_MAG_FILTER_SHIFT) & D3D12_FILTER_TYPE_MASK);
1480     }
1481 
1482     D3D12_FILTER_TYPE D3D12_DECODE_MIP_FILTER(D3D12_FILTER D3D12Filter) {
1483         return cast( D3D12_FILTER_TYPE )
1484             ((D3D12Filter >> D3D12_MIP_FILTER_SHIFT) & D3D12_FILTER_TYPE_MASK);
1485     }
1486 
1487     D3D12_FILTER_REDUCTION_TYPE D3D12_DECODE_FILTER_REDUCTION(D3D12_FILTER D3D12Filter) {
1488         return cast(D3D12_FILTER_REDUCTION_TYPE)
1489             ((D3D12Filter >> D3D12_FILTER_REDUCTION_TYPE_SHIFT) &
1490              D3D12_FILTER_REDUCTION_TYPE_MASK);
1491     }
1492 
1493     bool D3D12_DECODE_IS_COMPARISON_FILTER(D3D12_FILTER D3D12Filter) {
1494         return D3D12_DECODE_FILTER_REDUCTION(D3D12Filter) ==
1495             D3D12_FILTER_REDUCTION_TYPE_COMPARISON;
1496     }
1497 
1498     bool D3D12_DECODE_IS_ANISOTROPIC_FILTER(D3D12_FILTER D3D12Filter) {
1499         return ((D3D12Filter & D3D12_ANISOTROPIC_FILTERING_BIT) &&
1500                 (D3D12_FILTER_TYPE_LINEAR == D3D12_DECODE_MIN_FILTER(D3D12Filter)) &&
1501                 (D3D12_FILTER_TYPE_LINEAR == D3D12_DECODE_MAG_FILTER(D3D12Filter)) &&
1502                 (D3D12_FILTER_TYPE_LINEAR == D3D12_DECODE_MIP_FILTER(D3D12Filter)));
1503     }
1504 }
1505 
1506 alias D3D12_TEXTURE_ADDRESS_MODE = uint;
1507 enum : D3D12_TEXTURE_ADDRESS_MODE {
1508     D3D12_TEXTURE_ADDRESS_MODE_WRAP         = 1,
1509     D3D12_TEXTURE_ADDRESS_MODE_MIRROR       = 2,
1510     D3D12_TEXTURE_ADDRESS_MODE_CLAMP        = 3,
1511     D3D12_TEXTURE_ADDRESS_MODE_BORDER       = 4,
1512     D3D12_TEXTURE_ADDRESS_MODE_MIRROR_ONCE  = 5
1513 }
1514 
1515 struct D3D12_SAMPLER_DESC {
1516     D3D12_FILTER               Filter;
1517     D3D12_TEXTURE_ADDRESS_MODE AddressU;
1518     D3D12_TEXTURE_ADDRESS_MODE AddressV;
1519     D3D12_TEXTURE_ADDRESS_MODE AddressW;
1520     FLOAT                      MipLODBias = 0.0f;
1521     UINT                       MaxAnisotropy;
1522     D3D12_COMPARISON_FUNC      ComparisonFunc;
1523     FLOAT[4]                   BorderColor = [ 0.0f, 0.0f, 0.0f, 1.0f ];
1524     FLOAT                      MinLOD = 0.0f;
1525     FLOAT                      MaxLOD = 0.0f;
1526 }
1527 
1528 alias D3D12_BUFFER_UAV_FLAGS = uint;
1529 enum : D3D12_BUFFER_UAV_FLAGS {
1530     D3D12_BUFFER_UAV_FLAG_NONE = 0,
1531     D3D12_BUFFER_UAV_FLAG_RAW  = 0x1
1532 }
1533 
1534 struct D3D12_BUFFER_UAV {
1535     UINT64                 FirstElement;
1536     UINT                   NumElements;
1537     UINT                   StructureByteStride;
1538     UINT64                 CounterOffsetInBytes;
1539     D3D12_BUFFER_UAV_FLAGS Flags;
1540 }
1541 
1542 struct D3D12_TEX1D_UAV {
1543     UINT MipSlice;
1544 }
1545 
1546 struct D3D12_TEX1D_ARRAY_UAV {
1547     UINT MipSlice;
1548     UINT FirstArraySlice;
1549     UINT ArraySize;
1550 }
1551 
1552 struct D3D12_TEX2D_UAV {
1553     UINT MipSlice;
1554     UINT PlaneSlice;
1555 }
1556 
1557 struct D3D12_TEX2D_ARRAY_UAV {
1558     UINT MipSlice;
1559     UINT FirstArraySlice;
1560     UINT ArraySize;
1561     UINT PlaneSlice;
1562 }
1563 
1564 struct D3D12_TEX3D_UAV {
1565     UINT MipSlice;
1566     UINT FirstWSlice;
1567     UINT WSize;
1568 }
1569 
1570 alias D3D12_UAV_DIMENSION = uint;
1571 enum : D3D12_UAV_DIMENSION {
1572     D3D12_UAV_DIMENSION_UNKNOWN        = 0,
1573     D3D12_UAV_DIMENSION_BUFFER         = 1,
1574     D3D12_UAV_DIMENSION_TEXTURE1D      = 2,
1575     D3D12_UAV_DIMENSION_TEXTURE1DARRAY = 3,
1576     D3D12_UAV_DIMENSION_TEXTURE2D      = 4,
1577     D3D12_UAV_DIMENSION_TEXTURE2DARRAY = 5,
1578     D3D12_UAV_DIMENSION_TEXTURE3D      = 8
1579 }
1580 
1581 struct D3D12_UNORDERED_ACCESS_VIEW_DESC {
1582     DXGI_FORMAT         Format;
1583     D3D12_UAV_DIMENSION ViewDimension;
1584     union {
1585         D3D12_BUFFER_UAV      Buffer;
1586         D3D12_TEX1D_UAV       Texture1D;
1587         D3D12_TEX1D_ARRAY_UAV Texture1DArray;
1588         D3D12_TEX2D_UAV       Texture2D;
1589         D3D12_TEX2D_ARRAY_UAV Texture2DArray;
1590         D3D12_TEX3D_UAV       Texture3D;
1591     }
1592 }
1593 
1594 struct D3D12_BUFFER_RTV {
1595     UINT64 FirstElement;
1596     UINT   NumElements;
1597 }
1598 
1599 struct D3D12_TEX1D_RTV {
1600     UINT MipSlice;
1601 }
1602 
1603 struct D3D12_TEX1D_ARRAY_RTV {
1604     UINT MipSlice;
1605     UINT FirstArraySlice;
1606     UINT ArraySize;
1607 }
1608 
1609 struct D3D12_TEX2D_RTV {
1610     UINT MipSlice;
1611     UINT PlaneSlice;
1612 }
1613 
1614 struct D3D12_TEX2DMS_RTV {
1615     UINT UnusedField_NothingToDefine;
1616 }
1617 
1618 struct D3D12_TEX2D_ARRAY_RTV {
1619     UINT MipSlice;
1620     UINT FirstArraySlice;
1621     UINT ArraySize;
1622     UINT PlaneSlice;
1623 }
1624 
1625 struct D3D12_TEX2DMS_ARRAY_RTV {
1626     UINT FirstArraySlice;
1627     UINT ArraySize;
1628 }
1629 
1630 struct D3D12_TEX3D_RTV {
1631     UINT MipSlice;
1632     UINT FirstWSlice;
1633     UINT WSize;
1634 }
1635 
1636 alias D3D12_RTV_DIMENSION = uint;
1637 enum : D3D12_RTV_DIMENSION {
1638     D3D12_RTV_DIMENSION_UNKNOWN          = 0,
1639     D3D12_RTV_DIMENSION_BUFFER           = 1,
1640     D3D12_RTV_DIMENSION_TEXTURE1D        = 2,
1641     D3D12_RTV_DIMENSION_TEXTURE1DARRAY   = 3,
1642     D3D12_RTV_DIMENSION_TEXTURE2D        = 4,
1643     D3D12_RTV_DIMENSION_TEXTURE2DARRAY   = 5,
1644     D3D12_RTV_DIMENSION_TEXTURE2DMS      = 6,
1645     D3D12_RTV_DIMENSION_TEXTURE2DMSARRAY = 7,
1646     D3D12_RTV_DIMENSION_TEXTURE3D        = 8
1647 }
1648 
1649 struct D3D12_RENDER_TARGET_VIEW_DESC {
1650     DXGI_FORMAT         Format;
1651     D3D12_RTV_DIMENSION ViewDimension;
1652     union
1653     {
1654         D3D12_BUFFER_RTV        Buffer;
1655         D3D12_TEX1D_RTV         Texture1D;
1656         D3D12_TEX1D_ARRAY_RTV   Texture1DArray;
1657         D3D12_TEX2D_RTV         Texture2D;
1658         D3D12_TEX2D_ARRAY_RTV   Texture2DArray;
1659         D3D12_TEX2DMS_RTV       Texture2DMS;
1660         D3D12_TEX2DMS_ARRAY_RTV Texture2DMSArray;
1661         D3D12_TEX3D_RTV         Texture3D;
1662     }
1663 }
1664 
1665 struct D3D12_TEX1D_DSV {
1666     UINT MipSlice;
1667 }
1668 
1669 struct D3D12_TEX1D_ARRAY_DSV {
1670     UINT MipSlice;
1671     UINT FirstArraySlice;
1672     UINT ArraySize;
1673 }
1674 
1675 struct D3D12_TEX2D_DSV {
1676     UINT MipSlice;
1677 }
1678 
1679 struct D3D12_TEX2D_ARRAY_DSV {
1680     UINT MipSlice;
1681     UINT FirstArraySlice;
1682     UINT ArraySize;
1683 }
1684 
1685 struct D3D12_TEX2DMS_DSV {
1686     UINT UnusedField_NothingToDefine;
1687 }
1688 
1689 struct D3D12_TEX2DMS_ARRAY_DSV {
1690     UINT FirstArraySlice;
1691     UINT ArraySize;
1692 }
1693 
1694 alias D3D12_DSV_FLAGS = uint;
1695 enum : D3D12_DSV_FLAGS {
1696     D3D12_DSV_FLAG_NONE              = 0,
1697     D3D12_DSV_FLAG_READ_ONLY_DEPTH   = 0x1,
1698     D3D12_DSV_FLAG_READ_ONLY_STENCIL = 0x2
1699 }
1700 
1701 alias D3D12_DSV_DIMENSION = uint;
1702 enum : D3D12_DSV_DIMENSION {
1703     D3D12_DSV_DIMENSION_UNKNOWN          = 0,
1704     D3D12_DSV_DIMENSION_TEXTURE1D        = 1,
1705     D3D12_DSV_DIMENSION_TEXTURE1DARRAY   = 2,
1706     D3D12_DSV_DIMENSION_TEXTURE2D        = 3,
1707     D3D12_DSV_DIMENSION_TEXTURE2DARRAY   = 4,
1708     D3D12_DSV_DIMENSION_TEXTURE2DMS      = 5,
1709     D3D12_DSV_DIMENSION_TEXTURE2DMSARRAY = 6
1710 }
1711 
1712 struct D3D12_DEPTH_STENCIL_VIEW_DESC {
1713     DXGI_FORMAT         Format;
1714     D3D12_DSV_DIMENSION ViewDimension;
1715     D3D12_DSV_FLAGS     Flags;
1716     union
1717     {
1718         D3D12_TEX1D_DSV         Texture1D;
1719         D3D12_TEX1D_ARRAY_DSV   Texture1DArray;
1720         D3D12_TEX2D_DSV         Texture2D;
1721         D3D12_TEX2D_ARRAY_DSV   Texture2DArray;
1722         D3D12_TEX2DMS_DSV       Texture2DMS;
1723         D3D12_TEX2DMS_ARRAY_DSV Texture2DMSArray;
1724     }
1725 }
1726 
1727 alias D3D12_CLEAR_FLAGS = uint;
1728 enum : D3D12_CLEAR_FLAGS {
1729     D3D12_CLEAR_FLAG_DEPTH   = 0x1,
1730     D3D12_CLEAR_FLAG_STENCIL = 0x2
1731 }
1732 
1733 alias D3D12_FENCE_FLAGS = uint;
1734 enum : D3D12_FENCE_FLAGS {
1735     D3D12_FENCE_FLAG_NONE                 = 0,
1736     D3D12_FENCE_FLAG_SHARED               = 0x1,
1737     D3D12_FENCE_FLAG_SHARED_CROSS_ADAPTER = 0x2
1738 }
1739 
1740 alias D3D12_DESCRIPTOR_HEAP_TYPE = uint;
1741 enum : D3D12_DESCRIPTOR_HEAP_TYPE {
1742     D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV = 0,
1743     D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER     = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV + 1,
1744     D3D12_DESCRIPTOR_HEAP_TYPE_RTV         = D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER     + 1,
1745     D3D12_DESCRIPTOR_HEAP_TYPE_DSV         = D3D12_DESCRIPTOR_HEAP_TYPE_RTV         + 1,
1746     D3D12_DESCRIPTOR_HEAP_TYPE_NUM_TYPES   = D3D12_DESCRIPTOR_HEAP_TYPE_DSV         + 1
1747 }
1748 
1749 alias D3D12_DESCRIPTOR_HEAP_FLAGS = uint;
1750 enum : D3D12_DESCRIPTOR_HEAP_FLAGS {
1751     D3D12_DESCRIPTOR_HEAP_FLAG_NONE           = 0,
1752     D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE = 0x1
1753 }
1754 
1755 struct D3D12_DESCRIPTOR_HEAP_DESC {
1756 	this(this) {}
1757     D3D12_DESCRIPTOR_HEAP_TYPE  Type;
1758     UINT                        NumDescriptors;
1759     D3D12_DESCRIPTOR_HEAP_FLAGS Flags;
1760     UINT                        NodeMask;
1761 }
1762 
1763 alias D3D12_DESCRIPTOR_RANGE_TYPE = uint;
1764 enum : D3D12_DESCRIPTOR_RANGE_TYPE {
1765     D3D12_DESCRIPTOR_RANGE_TYPE_SRV     = 0,
1766     D3D12_DESCRIPTOR_RANGE_TYPE_UAV     = D3D12_DESCRIPTOR_RANGE_TYPE_SRV + 1,
1767     D3D12_DESCRIPTOR_RANGE_TYPE_CBV     = D3D12_DESCRIPTOR_RANGE_TYPE_UAV + 1,
1768     D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER = D3D12_DESCRIPTOR_RANGE_TYPE_CBV + 1
1769 }
1770 
1771 struct D3D12_DESCRIPTOR_RANGE {
1772     D3D12_DESCRIPTOR_RANGE_TYPE RangeType;
1773     UINT                        NumDescriptors;
1774     UINT                        BaseShaderRegister;
1775     UINT                        RegisterSpace;
1776     UINT                        OffsetInDescriptorsFromTableStart;
1777 }
1778 
1779 struct D3D12_ROOT_DESCRIPTOR_TABLE {
1780     UINT                           NumDescriptorRanges;
1781     const(D3D12_DESCRIPTOR_RANGE)* pDescriptorRanges;
1782 }
1783 
1784 struct D3D12_ROOT_CONSTANTS {
1785     UINT ShaderRegister;
1786     UINT RegisterSpace;
1787     UINT Num32BitValues;
1788 }
1789 
1790 struct D3D12_ROOT_DESCRIPTOR {
1791     UINT ShaderRegister;
1792     UINT RegisterSpace;
1793 }
1794 
1795 alias D3D12_SHADER_VISIBILITY = uint;
1796 enum : D3D12_SHADER_VISIBILITY {
1797     D3D12_SHADER_VISIBILITY_ALL      = 0,
1798     D3D12_SHADER_VISIBILITY_VERTEX   = 1,
1799     D3D12_SHADER_VISIBILITY_HULL     = 2,
1800     D3D12_SHADER_VISIBILITY_DOMAIN   = 3,
1801     D3D12_SHADER_VISIBILITY_GEOMETRY = 4,
1802     D3D12_SHADER_VISIBILITY_PIXEL    = 5
1803 }
1804 
1805 alias D3D12_ROOT_PARAMETER_TYPE = uint;
1806 enum : D3D12_ROOT_PARAMETER_TYPE {
1807     D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE = 0,
1808     D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS  = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE + 1,
1809     D3D12_ROOT_PARAMETER_TYPE_CBV              = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS  + 1,
1810     D3D12_ROOT_PARAMETER_TYPE_SRV              = D3D12_ROOT_PARAMETER_TYPE_CBV              + 1,
1811     D3D12_ROOT_PARAMETER_TYPE_UAV              = D3D12_ROOT_PARAMETER_TYPE_SRV              + 1
1812 }
1813 
1814 struct D3D12_ROOT_PARAMETER {
1815     D3D12_ROOT_PARAMETER_TYPE ParameterType;
1816     union {
1817         D3D12_ROOT_DESCRIPTOR_TABLE DescriptorTable;
1818         D3D12_ROOT_CONSTANTS        Constants;
1819         D3D12_ROOT_DESCRIPTOR       Descriptor;
1820     }
1821     D3D12_SHADER_VISIBILITY ShaderVisibility;
1822 }
1823 
1824 alias D3D12_ROOT_SIGNATURE_FLAGS = uint;
1825 enum : D3D12_ROOT_SIGNATURE_FLAGS {
1826     D3D12_ROOT_SIGNATURE_FLAG_NONE                               = 0,
1827     D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT = 0x1,
1828     D3D12_ROOT_SIGNATURE_FLAG_DENY_VERTEX_SHADER_ROOT_ACCESS     = 0x2,
1829     D3D12_ROOT_SIGNATURE_FLAG_DENY_HULL_SHADER_ROOT_ACCESS       = 0x4,
1830     D3D12_ROOT_SIGNATURE_FLAG_DENY_DOMAIN_SHADER_ROOT_ACCESS     = 0x8,
1831     D3D12_ROOT_SIGNATURE_FLAG_DENY_GEOMETRY_SHADER_ROOT_ACCESS   = 0x10,
1832     D3D12_ROOT_SIGNATURE_FLAG_DENY_PIXEL_SHADER_ROOT_ACCESS      = 0x20,
1833     D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT                = 0x40
1834 }
1835 
1836 alias D3D12_STATIC_BORDER_COLOR = uint;
1837 enum : D3D12_STATIC_BORDER_COLOR {
1838     D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK = 0,
1839     D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK      = D3D12_STATIC_BORDER_COLOR_TRANSPARENT_BLACK + 1,
1840     D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE      = D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK      + 1
1841 }
1842 
1843 struct D3D12_STATIC_SAMPLER_DESC {
1844     D3D12_FILTER               Filter;
1845     D3D12_TEXTURE_ADDRESS_MODE AddressU;
1846     D3D12_TEXTURE_ADDRESS_MODE AddressV;
1847     D3D12_TEXTURE_ADDRESS_MODE AddressW;
1848     FLOAT                      MipLODBias = 0.0f;
1849     UINT                       MaxAnisotropy;
1850     D3D12_COMPARISON_FUNC      ComparisonFunc;
1851     D3D12_STATIC_BORDER_COLOR  BorderColor;
1852     FLOAT                      MinLOD = 0.0f;
1853     FLOAT                      MaxLOD = 0.0f;
1854     UINT                       ShaderRegister;
1855     UINT                       RegisterSpace;
1856     D3D12_SHADER_VISIBILITY    ShaderVisibility;
1857 }
1858 
1859 struct D3D12_ROOT_SIGNATURE_DESC {
1860     UINT                              NumParameters;
1861     const(D3D12_ROOT_PARAMETER)*      pParameters;
1862     UINT                              NumStaticSamplers;
1863     const(D3D12_STATIC_SAMPLER_DESC)* pStaticSamplers;
1864     D3D12_ROOT_SIGNATURE_FLAGS        Flags;
1865 }
1866 
1867 alias D3D_ROOT_SIGNATURE_VERSION = uint;
1868 enum : D3D_ROOT_SIGNATURE_VERSION {
1869     D3D_ROOT_SIGNATURE_VERSION_1 = 0x1
1870 }
1871 
1872 mixin(uuid!(ID3D12RootSignatureDeserializer, "34AB647B-3CC8-46AC-841B-C0965645C046"));
1873 extern(C++) interface ID3D12RootSignatureDeserializer : IUnknown {
1874     const(D3D12_ROOT_SIGNATURE_DESC)* GetRootSignatureDesc();
1875 }
1876 
1877 
1878 
1879 extern(Windows) nothrow
1880 HRESULT D3D12SerializeRootSignature(const(D3D12_ROOT_SIGNATURE_DESC)* pRootSignature,
1881                                     D3D_ROOT_SIGNATURE_VERSION Version,
1882                                     ID3DBlob* ppBlob,
1883                                     ID3DBlob* ppErrorBlob);
1884 
1885 alias PFN_D3D12_SERIALIZE_ROOT_SIGNATURE = extern(Windows) nothrow HRESULT function(
1886                      const(D3D12_ROOT_SIGNATURE_DESC)* pRootSignature,
1887                      D3D_ROOT_SIGNATURE_VERSION Version,
1888                      ID3DBlob* ppBlob,
1889                      ID3DBlob* ppErrorBlob);
1890 
1891 
1892 
1893 extern(Windows) nothrow
1894 HRESULT D3D12CreateRootSignatureDeserializer(LPCVOID pSrcData,
1895                                              SIZE_T SrcDataSizeInBytes,
1896                                              REFIID pRootSignatureDeserializerInterface,
1897                                              void** ppRootSignatureDeserializer);
1898 
1899 alias PFN_D3D12_CREATE_ROOT_SIGNATURE_DESERIALIZER = extern(Windows) nothrow HRESULT function(
1900                                                                       LPCVOID pSrcData,
1901                                                                       SIZE_T SrcDataSizeInBytes,
1902                                                                       REFIID pRootSignatureDeserializerInterface,
1903                                                                       void** ppRootSignatureDeserializer);
1904 
1905 
1906 struct D3D12_CPU_DESCRIPTOR_HANDLE {
1907 	this(this) {}
1908     SIZE_T ptr;
1909 }
1910 
1911 struct D3D12_GPU_DESCRIPTOR_HANDLE {
1912 	this(this) {}
1913     UINT64 ptr;
1914 }
1915 
1916 // If rects are supplied in D3D12_DISCARD_REGION, below, the resource
1917 // must have 2D subresources with all specified subresources the same dimension.
1918 struct D3D12_DISCARD_REGION {
1919     UINT               NumRects;
1920     const(D3D12_RECT)* pRects;
1921     UINT               FirstSubresource;
1922     UINT               NumSubresources;
1923 }
1924 
1925 alias D3D12_QUERY_HEAP_TYPE = uint;
1926 enum : D3D12_QUERY_HEAP_TYPE {
1927     D3D12_QUERY_HEAP_TYPE_OCCLUSION           = 0,
1928     D3D12_QUERY_HEAP_TYPE_TIMESTAMP           = 1,
1929     D3D12_QUERY_HEAP_TYPE_PIPELINE_STATISTICS = 2,
1930     D3D12_QUERY_HEAP_TYPE_SO_STATISTICS       = 3
1931 }
1932 
1933 struct D3D12_QUERY_HEAP_DESC {
1934     D3D12_QUERY_HEAP_TYPE Type;
1935     UINT                  Count;
1936     UINT                  NodeMask;
1937 }
1938 
1939 alias D3D12_QUERY_TYPE = uint;
1940 enum : D3D12_QUERY_TYPE {
1941     D3D12_QUERY_TYPE_OCCLUSION             = 0,
1942     D3D12_QUERY_TYPE_BINARY_OCCLUSION      = 1,
1943     D3D12_QUERY_TYPE_TIMESTAMP             = 2,
1944     D3D12_QUERY_TYPE_PIPELINE_STATISTICS   = 3,
1945     D3D12_QUERY_TYPE_SO_STATISTICS_STREAM0 = 4,
1946     D3D12_QUERY_TYPE_SO_STATISTICS_STREAM1 = 5,
1947     D3D12_QUERY_TYPE_SO_STATISTICS_STREAM2 = 6,
1948     D3D12_QUERY_TYPE_SO_STATISTICS_STREAM3 = 7
1949 }
1950 
1951 alias D3D12_PREDICATION_OP = uint;
1952 enum : D3D12_PREDICATION_OP {
1953     D3D12_PREDICATION_OP_EQUAL_ZERO     = 0,
1954     D3D12_PREDICATION_OP_NOT_EQUAL_ZERO = 1
1955 }
1956 
1957 struct D3D12_QUERY_DATA_PIPELINE_STATISTICS {
1958     UINT64 IAVertices;
1959     UINT64 IAPrimitives;
1960     UINT64 VSInvocations;
1961     UINT64 GSInvocations;
1962     UINT64 GSPrimitives;
1963     UINT64 CInvocations;
1964     UINT64 CPrimitives;
1965     UINT64 PSInvocations;
1966     UINT64 HSInvocations;
1967     UINT64 DSInvocations;
1968     UINT64 CSInvocations;
1969 }
1970 
1971 struct D3D12_QUERY_DATA_SO_STATISTICS {
1972     UINT64 NumPrimitivesWritten;
1973     UINT64 PrimitivesStorageNeeded;
1974 }
1975 
1976 struct D3D12_STREAM_OUTPUT_BUFFER_VIEW {
1977     D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
1978     UINT64                    SizeInBytes;
1979     D3D12_GPU_VIRTUAL_ADDRESS BufferFilledSizeLocation;
1980 }
1981 
1982 struct D3D12_DRAW_ARGUMENTS {
1983     UINT VertexCountPerInstance;
1984     UINT InstanceCount;
1985     UINT StartVertexLocation;
1986     UINT StartInstanceLocation;
1987 }
1988 
1989 struct D3D12_DRAW_INDEXED_ARGUMENTS {
1990     UINT IndexCountPerInstance;
1991     UINT InstanceCount;
1992     UINT StartIndexLocation;
1993     INT  BaseVertexLocation;
1994     UINT StartInstanceLocation;
1995 }
1996 
1997 struct D3D12_DISPATCH_ARGUMENTS {
1998     UINT ThreadGroupCountX;
1999     UINT ThreadGroupCountY;
2000     UINT ThreadGroupCountZ;
2001 }
2002 
2003 struct D3D12_VERTEX_BUFFER_VIEW {
2004     D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
2005     UINT                      SizeInBytes;
2006     UINT                      StrideInBytes;
2007 }
2008 
2009 struct D3D12_INDEX_BUFFER_VIEW {
2010     D3D12_GPU_VIRTUAL_ADDRESS BufferLocation;
2011     UINT                      SizeInBytes;
2012     DXGI_FORMAT               Format;
2013 }
2014 
2015 alias D3D12_INDIRECT_ARGUMENT_TYPE = uint;
2016 enum : D3D12_INDIRECT_ARGUMENT_TYPE {
2017     D3D12_INDIRECT_ARGUMENT_TYPE_DRAW                  = 0,
2018     D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED          = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW                 + 1,
2019     D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH              = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED         + 1,
2020     D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW    = D3D12_INDIRECT_ARGUMENT_TYPE_DISPATCH             + 1,
2021     D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW     = D3D12_INDIRECT_ARGUMENT_TYPE_VERTEX_BUFFER_VIEW   + 1,
2022     D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT              = D3D12_INDIRECT_ARGUMENT_TYPE_INDEX_BUFFER_VIEW    + 1,
2023     D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW  = D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT             + 1,
2024     D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW  = D3D12_INDIRECT_ARGUMENT_TYPE_CONSTANT_BUFFER_VIEW + 1,
2025     D3D12_INDIRECT_ARGUMENT_TYPE_UNORDERED_ACCESS_VIEW = D3D12_INDIRECT_ARGUMENT_TYPE_SHADER_RESOURCE_VIEW + 1
2026 }
2027 
2028 struct D3D12_INDIRECT_ARGUMENT_DESC {
2029     D3D12_INDIRECT_ARGUMENT_TYPE Type;
2030     union {
2031         struct {
2032             UINT Slot;
2033         }
2034         static struct _Constant {
2035             UINT RootParameterIndex;
2036             UINT DestOffsetIn32BitValues;
2037             UINT Num32BitValuesToSet;
2038         }
2039         static struct _ConstantBufferView {
2040             UINT RootParameterIndex;
2041         }
2042         static struct _ShaderResourceView {
2043             UINT RootParameterIndex;
2044         }
2045         static struct _UnorderedAccessView {
2046             UINT RootParameterIndex;
2047         }
2048 
2049         _Constant Constant;
2050         _ConstantBufferView ConstantBufferView;
2051         _ShaderResourceView ShaderResourceView;
2052         _UnorderedAccessView UnorderedAccessView;
2053     }
2054 }
2055 
2056 struct D3D12_COMMAND_SIGNATURE_DESC {
2057     UINT                                 ByteStride;
2058     UINT                                 NumArgumentDescs;
2059     const(D3D12_INDIRECT_ARGUMENT_DESC)* pArgumentDescs;
2060     UINT                                 NodeMask;
2061 }
2062 
2063 mixin(uuid!(ID3D12Pageable, "63ee58fb-1268-4835-86da-f008ce62f0d6"));
2064 extern(C++) interface ID3D12Pageable : ID3D12DeviceChild {}
2065 
2066 mixin(uuid!(ID3D12Heap, "6b3b2502-6e51-45b3-90ee-9884265e8df3"));
2067 extern(C++) interface ID3D12Heap : ID3D12Pageable {
2068 
2069 	version(CORRECT_ABI)
2070 	{
2071     D3D12_HEAP_DESC GetDesc();
2072 	}
2073 	else
2074 	{
2075 	void GetDesc(D3D12_HEAP_DESC* outDesc);
2076 	}
2077 
2078 	version(CORRECT_ABI){}
2079 	else
2080 	{
2081 	final D3D12_HEAP_DESC GetDesc()
2082 	{
2083 		D3D12_HEAP_DESC temp;
2084 		GetDesc(&temp);
2085 		return temp;
2086 	}
2087 	}
2088 
2089 
2090 }
2091 
2092 mixin(uuid!(ID3D12Resource, "696442be-a72e-4059-bc79-5b5c98040fad"));
2093 extern(C++) interface ID3D12Resource : ID3D12Pageable {
2094     HRESULT Map(UINT Subresource,
2095                 const(D3D12_RANGE)*pReadRange,
2096                 void** ppData);
2097 
2098     void Unmap(UINT Subresource,
2099                const(D3D12_RANGE)* pWrittenRange);
2100 
2101 	version(CORRECT_ABI)
2102 	{
2103     D3D12_RESOURCE_DESC GetDesc();
2104 	}
2105 	else
2106 	{
2107 	void GetDesc(D3D12_RESOURCE_DESC* outDesc);
2108 	}
2109 
2110     D3D12_GPU_VIRTUAL_ADDRESS GetGPUVirtualAddress();
2111 
2112     HRESULT WriteToSubresource(UINT DstSubresource,
2113                                const(D3D12_BOX)* pDstBox,
2114                                const(void)* pSrcData,
2115                                UINT SrcRowPitch,
2116                                UINT SrcDepthPitch);
2117 
2118     HRESULT ReadFromSubresource(void* pDstData,
2119                                 UINT DstRowPitch,
2120                                 UINT DstDepthPitch,
2121                                 UINT SrcSubresource,
2122                                 const(D3D12_BOX)* pSrcBox);
2123 
2124     HRESULT GetHeapProperties(D3D12_HEAP_PROPERTIES* pHeapProperties,
2125                               D3D12_HEAP_FLAGS* pHeapFlags);
2126 
2127 
2128 
2129 	version(CORRECT_ABI){}
2130 	else
2131 	{
2132 	final D3D12_RESOURCE_DESC GetDesc()
2133 	{
2134 		D3D12_RESOURCE_DESC temp;
2135 		GetDesc(&temp);
2136 		return temp;
2137 	}
2138 	}
2139 }
2140 
2141 mixin(uuid!(ID3D12CommandAllocator, "6102dee4-af59-4b09-b999-b44d73f09b24"));
2142 extern(C++) interface ID3D12CommandAllocator : ID3D12Pageable {
2143     HRESULT Reset();
2144 }
2145 
2146 mixin(uuid!(ID3D12Fence, "0a753dcf-c4d8-4b91-adf6-be5a60d95a76"));
2147 extern(C++) interface ID3D12Fence : ID3D12Pageable {
2148     UINT64 GetCompletedValue();
2149 
2150     HRESULT SetEventOnCompletion(UINT64 Value, HANDLE hEvent);
2151 
2152     HRESULT Signal(UINT64 Value);
2153 }
2154 
2155 mixin(uuid!(ID3D12PipelineState, "765a30f3-f624-4c6f-a828-ace948622445"));
2156 extern(C++) interface ID3D12PipelineState : ID3D12Pageable {
2157     HRESULT GetCachedBlob(ID3DBlob*ppBlob);
2158 }
2159 
2160 mixin(uuid!(ID3D12DescriptorHeap, "8efb471d-616c-4f49-90f7-127bb763fa51"));
2161 extern(C++) interface ID3D12DescriptorHeap : ID3D12Pageable {
2162 
2163 	version(CORRECT_ABI)
2164 	{
2165     D3D12_DESCRIPTOR_HEAP_DESC GetDesc();
2166 
2167     D3D12_CPU_DESCRIPTOR_HANDLE GetCPUDescriptorHandleForHeapStart();
2168 
2169     D3D12_GPU_DESCRIPTOR_HANDLE GetGPUDescriptorHandleForHeapStart();
2170 	}
2171 	else
2172 	{
2173 	void GetDesc(D3D12_DESCRIPTOR_HEAP_DESC* outDesc);
2174 
2175 	void GetCPUDescriptorHandleForHeapStart(D3D12_CPU_DESCRIPTOR_HANDLE* outHandle);
2176 
2177 	void GetGPUDescriptorHandleForHeapStart(D3D12_GPU_DESCRIPTOR_HANDLE* outHandle);
2178 	}
2179 
2180 	// ==============================================================================
2181 	// Helpers for incorrect ABI below
2182 
2183 	version(CORRECT_ABI){}
2184 	else
2185 	{
2186 	final D3D12_DESCRIPTOR_HEAP_DESC GetDesc()
2187 	{
2188 		D3D12_DESCRIPTOR_HEAP_DESC temp;
2189 		GetDesc(&temp);
2190 		return temp;
2191 	}
2192 
2193 	final D3D12_CPU_DESCRIPTOR_HANDLE GetCPUDescriptorHandleForHeapStart()
2194 	{
2195 		D3D12_CPU_DESCRIPTOR_HANDLE temp;
2196 		GetCPUDescriptorHandleForHeapStart(&temp);
2197 		return temp;
2198 	}
2199 
2200 	final D3D12_GPU_DESCRIPTOR_HANDLE GetGPUDescriptorHandleForHeapStart()
2201 	{
2202 		D3D12_GPU_DESCRIPTOR_HANDLE temp;
2203 		GetGPUDescriptorHandleForHeapStart(&temp);
2204 		return temp;
2205 	}
2206 	} // version(CORRECT_ABI) else
2207 }
2208 
2209 mixin(uuid!(ID3D12QueryHeap, "0d9658ae-ed45-469e-a61d-970ec583cab4"));
2210 extern(C++) interface ID3D12QueryHeap : ID3D12Pageable {}
2211 
2212 mixin(uuid!(ID3D12CommandSignature, "c36a797c-ec80-4f0a-8985-a7b2475082d1"));
2213 extern(C++) interface ID3D12CommandSignature : ID3D12Pageable {}
2214 
2215 mixin(uuid!(ID3D12CommandList, "7116d91c-e7e4-47ce-b8c6-ec8168f437e5"));
2216 extern(C++) interface ID3D12CommandList : ID3D12DeviceChild {
2217 
2218     D3D12_COMMAND_LIST_TYPE GetType();
2219 }
2220 
2221 mixin(uuid!(ID3D12GraphicsCommandList, "5b160d0f-ac1b-4185-8ba8-b3ae42a5a455"));
2222 extern(C++) interface ID3D12GraphicsCommandList : ID3D12CommandList {
2223     HRESULT Close();
2224 
2225     HRESULT Reset(ID3D12CommandAllocator pAllocator,
2226                   ID3D12PipelineState pInitialState);
2227 
2228     void ClearState(ID3D12PipelineState pPipelineState);
2229 
2230     void DrawInstanced(
2231         UINT VertexCountPerInstance,
2232         UINT InstanceCount,
2233         UINT StartVertexLocation,
2234         UINT StartInstanceLocation);
2235 
2236     void DrawIndexedInstanced(
2237         UINT IndexCountPerInstance,
2238         UINT InstanceCount,
2239         UINT StartIndexLocation,
2240         INT BaseVertexLocation,
2241         UINT StartInstanceLocation);
2242 
2243     void Dispatch(
2244         UINT ThreadGroupCountX,
2245         UINT ThreadGroupCountY,
2246         UINT ThreadGroupCountZ);
2247 
2248     void CopyBufferRegion(
2249         ID3D12Resource pDstBuffer,
2250         UINT64 DstOffset,
2251         ID3D12Resource pSrcBuffer,
2252         UINT64 SrcOffset,
2253         UINT64 NumBytes);
2254 
2255     void CopyTextureRegion(
2256         const(D3D12_TEXTURE_COPY_LOCATION)* pDst,
2257         UINT DstX,
2258         UINT DstY,
2259         UINT DstZ,
2260         const(D3D12_TEXTURE_COPY_LOCATION)* pSrc,
2261         const(D3D12_BOX)* pSrcBox);
2262 
2263     void CopyResource(
2264         ID3D12Resource pDstResource,
2265         ID3D12Resource pSrcResource);
2266 
2267     void CopyTiles(
2268         ID3D12Resource pTiledResource,
2269         const(D3D12_TILED_RESOURCE_COORDINATE)* pTileRegionStartCoordinate,
2270         const(D3D12_TILE_REGION_SIZE)* pTileRegionSize,
2271         ID3D12Resource pBuffer,
2272         UINT64 BufferStartOffsetInBytes,
2273         D3D12_TILE_COPY_FLAGS Flags);
2274 
2275     void ResolveSubresource(
2276         ID3D12Resource pDstResource,
2277         UINT DstSubresource,
2278         ID3D12Resource pSrcResource,
2279         UINT SrcSubresource,
2280         DXGI_FORMAT Format);
2281 
2282     void IASetPrimitiveTopology(
2283         D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology);
2284 
2285     void RSSetViewports(
2286         UINT NumViewports,
2287         const(D3D12_VIEWPORT) *pViewports);
2288 
2289     void RSSetScissorRects(
2290         UINT NumRects,
2291         const(D3D12_RECT)* pRects);
2292 
2293     void OMSetBlendFactor(
2294         const(FLOAT)[4] BlendFactor);
2295 
2296     void OMSetStencilRef(
2297         UINT StencilRef);
2298 
2299     void SetPipelineState(
2300         ID3D12PipelineState pPipelineState);
2301 
2302     void ResourceBarrier(
2303         UINT NumBarriers,
2304         const(D3D12_RESOURCE_BARRIER)* pBarriers);
2305 
2306     void ExecuteBundle(
2307         ID3D12GraphicsCommandList pCommandList);
2308 
2309     void SetDescriptorHeaps(
2310         UINT NumDescriptorHeaps,
2311         ID3D12DescriptorHeap *ppDescriptorHeaps);
2312 
2313     void SetComputeRootSignature(
2314         ID3D12RootSignature pRootSignature);
2315 
2316     void SetGraphicsRootSignature(
2317         ID3D12RootSignature pRootSignature);
2318 
2319     void SetComputeRootDescriptorTable(
2320         UINT RootParameterIndex,
2321         D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
2322 
2323     void SetGraphicsRootDescriptorTable(
2324         UINT RootParameterIndex,
2325         D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor);
2326 
2327     void SetComputeRoot32BitConstant(
2328         UINT RootParameterIndex,
2329         UINT SrcData,
2330         UINT DestOffsetIn32BitValues);
2331 
2332     void SetGraphicsRoot32BitConstant(
2333         UINT RootParameterIndex,
2334         UINT SrcData,
2335         UINT DestOffsetIn32BitValues);
2336 
2337     void SetComputeRoot32BitConstants(
2338         UINT RootParameterIndex,
2339         UINT Num32BitValuesToSet,
2340         const(void)* pSrcData,
2341         UINT DestOffsetIn32BitValues);
2342 
2343     void SetGraphicsRoot32BitConstants(
2344         UINT RootParameterIndex,
2345         UINT Num32BitValuesToSet,
2346         const(void) *pSrcData,
2347         UINT DestOffsetIn32BitValues);
2348 
2349     void SetComputeRootConstantBufferView(
2350         UINT RootParameterIndex,
2351         D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
2352 
2353     void SetGraphicsRootConstantBufferView(
2354         UINT RootParameterIndex,
2355         D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
2356 
2357     void SetComputeRootShaderResourceView(
2358         UINT RootParameterIndex,
2359         D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
2360 
2361     void SetGraphicsRootShaderResourceView(
2362         UINT RootParameterIndex,
2363         D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
2364 
2365     void SetComputeRootUnorderedAccessView(
2366         UINT RootParameterIndex,
2367         D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
2368 
2369     void SetGraphicsRootUnorderedAccessView(
2370         UINT RootParameterIndex,
2371         D3D12_GPU_VIRTUAL_ADDRESS BufferLocation);
2372 
2373     void IASetIndexBuffer(
2374         const(D3D12_INDEX_BUFFER_VIEW)* pView);
2375 
2376     void IASetVertexBuffers(
2377         UINT StartSlot,
2378         UINT NumViews,
2379         const(D3D12_VERTEX_BUFFER_VIEW)* pViews);
2380 
2381     void SOSetTargets(
2382         UINT StartSlot,
2383         UINT NumViews,
2384         const(D3D12_STREAM_OUTPUT_BUFFER_VIEW)* pViews);
2385 
2386     void OMSetRenderTargets(
2387         UINT NumRenderTargetDescriptors,
2388         const(D3D12_CPU_DESCRIPTOR_HANDLE)* pRenderTargetDescriptors,
2389         BOOL RTsSingleHandleToDescriptorRange,
2390         const(D3D12_CPU_DESCRIPTOR_HANDLE)* pDepthStencilDescriptor);
2391 
2392     void ClearDepthStencilView(
2393         D3D12_CPU_DESCRIPTOR_HANDLE DepthStencilView,
2394         D3D12_CLEAR_FLAGS ClearFlags,
2395         FLOAT Depth,
2396         UINT8 Stencil,
2397         UINT NumRects,
2398         const(D3D12_RECT)* pRects);
2399 
2400     void ClearRenderTargetView(
2401         D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView,
2402         const(FLOAT)* ColorRGBA,
2403         UINT NumRects,
2404         const(D3D12_RECT)* pRects);
2405 
2406     void ClearUnorderedAccessViewUint(
2407         D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap,
2408         D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle,
2409         ID3D12Resource pResource,
2410         const(UINT)* Values,
2411         UINT NumRects,
2412         const(D3D12_RECT)* pRects);
2413 
2414     void ClearUnorderedAccessViewFloat(
2415         D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap,
2416         D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle,
2417         ID3D12Resource pResource,
2418         const(FLOAT)* Values,
2419         UINT NumRects,
2420         const(D3D12_RECT)* pRects);
2421 
2422     void DiscardResource(
2423         ID3D12Resource pResource,
2424         const(D3D12_DISCARD_REGION)* pRegion);
2425 
2426     void BeginQuery(
2427         ID3D12QueryHeap pQueryHeap,
2428         D3D12_QUERY_TYPE Type,
2429         UINT Index);
2430 
2431     void EndQuery(
2432         ID3D12QueryHeap pQueryHeap,
2433         D3D12_QUERY_TYPE Type,
2434         UINT Index);
2435 
2436     void ResolveQueryData(
2437         ID3D12QueryHeap pQueryHeap,
2438         D3D12_QUERY_TYPE Type,
2439         UINT StartIndex,
2440         UINT NumQueries,
2441         ID3D12Resource pDestinationBuffer,
2442         UINT64 AlignedDestinationBufferOffset);
2443 
2444     void SetPredication(
2445         ID3D12Resource pBuffer,
2446         UINT64 AlignedBufferOffset,
2447         D3D12_PREDICATION_OP Operation);
2448 
2449     void SetMarker(
2450         UINT Metadata,
2451         const(void)* pData,
2452         UINT Size);
2453 
2454     void BeginEvent(
2455         UINT Metadata,
2456         const(void)* pData,
2457         UINT Size);
2458 
2459     void EndEvent();
2460 
2461     void ExecuteIndirect(
2462         ID3D12CommandSignature pCommandSignature,
2463         UINT MaxCommandCount,
2464         ID3D12Resource pArgumentBuffer,
2465         UINT64 ArgumentBufferOffset,
2466         ID3D12Resource pCountBuffer,
2467         UINT64 CountBufferOffset);
2468 }
2469 
2470 mixin(uuid!(ID3D12CommandQueue, "0ec870a6-5d7e-4c22-8cfc-5baae07616ed"));
2471 extern(C++) interface ID3D12CommandQueue : ID3D12Pageable {
2472     void UpdateTileMappings(
2473         ID3D12Resource pResource,
2474         UINT NumResourceRegions,
2475         const(D3D12_TILED_RESOURCE_COORDINATE)* pResourceRegionStartCoordinates,
2476         const(D3D12_TILE_REGION_SIZE)* pResourceRegionSizes,
2477         ID3D12Heap pHeap,
2478         UINT NumRanges,
2479         const(D3D12_TILE_RANGE_FLAGS)* pRangeFlags,
2480         const(UINT)* pHeapRangeStartOffsets,
2481         const(UINT)* pRangeTileCounts,
2482         D3D12_TILE_MAPPING_FLAGS Flags);
2483 
2484     void CopyTileMappings(
2485         ID3D12Resource pDstResource,
2486         const(D3D12_TILED_RESOURCE_COORDINATE)* pDstRegionStartCoordinate,
2487         ID3D12Resource pSrcResource,
2488         const(D3D12_TILED_RESOURCE_COORDINATE)* pSrcRegionStartCoordinate,
2489         const(D3D12_TILE_REGION_SIZE)* pRegionSize,
2490         D3D12_TILE_MAPPING_FLAGS Flags);
2491 
2492     void ExecuteCommandLists(
2493         UINT NumCommandLists,
2494         const(ID3D12CommandList)* ppCommandLists);
2495 
2496     void SetMarker(
2497         UINT Metadata,
2498         const(void)* pData,
2499         UINT Size);
2500 
2501     void BeginEvent(
2502         UINT Metadata,
2503         const(void)* pData,
2504         UINT Size);
2505 
2506     void EndEvent();
2507 
2508     HRESULT Signal(
2509         ID3D12Fence pFence,
2510         UINT64 Value);
2511 
2512     HRESULT Wait(
2513         ID3D12Fence pFence,
2514         UINT64 Value);
2515 
2516     HRESULT GetTimestampFrequency(
2517         UINT64* pFrequency);
2518 
2519     HRESULT GetClockCalibration(
2520         UINT64* pGpuTimestamp,
2521         UINT64* pCpuTimestamp);
2522 
2523 	version(CORRECT_ABI)
2524 	{
2525     D3D12_COMMAND_QUEUE_DESC GetDesc();
2526 	}
2527 	else
2528 	{
2529 	void GetDesc(D3D12_COMMAND_QUEUE_DESC* outDesc);
2530 	}
2531 
2532 	version(CORRECT_ABI){}
2533 	else
2534 	{
2535 	final D3D12_COMMAND_QUEUE_DESC GetDesc()
2536 	{
2537 		D3D12_COMMAND_QUEUE_DESC temp;
2538 		GetDesc(&temp);
2539 		return temp;
2540 	}
2541 	}
2542 
2543 }
2544 
2545 mixin(uuid!(ID3D12Device, "189819f1-1db6-4b57-be54-1821339b85f7"));
2546 extern(C++) interface ID3D12Device : ID3D12Object {
2547     UINT GetNodeCount();
2548 
2549     HRESULT CreateCommandQueue(
2550         const(D3D12_COMMAND_QUEUE_DESC)* pDesc,
2551         REFIID riid,
2552         ID3D12CommandQueue* ppCommandQueue);
2553 
2554     HRESULT CreateCommandAllocator(
2555         D3D12_COMMAND_LIST_TYPE type,
2556         REFIID riid,
2557         ID3D12CommandAllocator* ppCommandAllocator);
2558 
2559     HRESULT CreateGraphicsPipelineState(
2560         const(D3D12_GRAPHICS_PIPELINE_STATE_DESC)* pDesc,
2561         REFIID riid,
2562         ID3D12PipelineState* ppPipelineState);
2563 
2564     HRESULT CreateComputePipelineState(
2565         const(D3D12_COMPUTE_PIPELINE_STATE_DESC)* pDesc,
2566         REFIID riid,
2567         ID3D12PipelineState* ppPipelineState);
2568 
2569     HRESULT CreateCommandList(
2570         UINT nodeMask,
2571         D3D12_COMMAND_LIST_TYPE type,
2572         ID3D12CommandAllocator pCommandAllocator,
2573         ID3D12PipelineState pInitialState,
2574         REFIID riid,
2575         ID3D12CommandList* ppCommandList);
2576 
2577     HRESULT CheckFeatureSupport(
2578         D3D12_FEATURE Feature,
2579         void* pFeatureSupportData,
2580         UINT FeatureSupportDataSize);
2581 
2582     HRESULT CreateDescriptorHeap(
2583         const(D3D12_DESCRIPTOR_HEAP_DESC)* pDescriptorHeapDesc,
2584         REFIID riid,
2585         ID3D12DescriptorHeap* ppvHeap);
2586 
2587     UINT GetDescriptorHandleIncrementSize(
2588         D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType);
2589 
2590     HRESULT CreateRootSignature(
2591         UINT nodeMask,
2592         const(void)* pBlobWithRootSignature,
2593         SIZE_T blobLengthInBytes,
2594         REFIID riid,
2595         ID3D12RootSignature* ppvRootSignature);
2596 
2597     void CreateConstantBufferView(
2598         const(D3D12_CONSTANT_BUFFER_VIEW_DESC)* pDesc,
2599         D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
2600 
2601     void CreateShaderResourceView(
2602         ID3D12Resource pResource,
2603         const(D3D12_SHADER_RESOURCE_VIEW_DESC)* pDesc,
2604         D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
2605 
2606     void CreateUnorderedAccessView(
2607         ID3D12Resource pResource,
2608         ID3D12Resource pCounterResource,
2609         const(D3D12_UNORDERED_ACCESS_VIEW_DESC)* pDesc,
2610         D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
2611 
2612     void CreateRenderTargetView(
2613         ID3D12Resource pResource,
2614         const(D3D12_RENDER_TARGET_VIEW_DESC)* pDesc,
2615         D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
2616 
2617     void CreateDepthStencilView(
2618         ID3D12Resource pResource,
2619         const(D3D12_DEPTH_STENCIL_VIEW_DESC)* pDesc,
2620         D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
2621 
2622     void CreateSampler(
2623         const(D3D12_SAMPLER_DESC)* pDesc,
2624         D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptor);
2625 
2626     void CopyDescriptors(
2627         UINT NumDestDescriptorRanges,
2628         const(D3D12_CPU_DESCRIPTOR_HANDLE)* pDestDescriptorRangeStarts,
2629         const(UINT)* pDestDescriptorRangeSizes,
2630         UINT NumSrcDescriptorRanges,
2631         const(D3D12_CPU_DESCRIPTOR_HANDLE)* pSrcDescriptorRangeStarts,
2632         const(UINT)* pSrcDescriptorRangeSizes,
2633         D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
2634 
2635     void CopyDescriptorsSimple(
2636         UINT NumDescriptors,
2637         D3D12_CPU_DESCRIPTOR_HANDLE DestDescriptorRangeStart,
2638         D3D12_CPU_DESCRIPTOR_HANDLE SrcDescriptorRangeStart,
2639         D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapsType);
2640 
2641 	version(CORRECT_ABI)
2642 	{
2643     D3D12_RESOURCE_ALLOCATION_INFO GetResourceAllocationInfo(
2644         UINT visibleMask,
2645         UINT numResourceDescs,
2646         const(D3D12_RESOURCE_DESC)* pResourceDescs);
2647 
2648     D3D12_HEAP_PROPERTIES GetCustomHeapProperties(
2649         UINT nodeMask,
2650         D3D12_HEAP_TYPE heapType);
2651 	}
2652 	else
2653 	{
2654 		void GetResourceAllocationInfo(D3D12_RESOURCE_ALLOCATION_INFO* outDesc,
2655 									   UINT visibleMask,
2656 									   UINT numResourceDescs,
2657 									   const(D3D12_RESOURCE_DESC)* pResourceDescs);
2658 
2659 		void GetCustomHeapProperties(D3D12_HEAP_PROPERTIES* outDesc,
2660 									 UINT nodeMask,
2661 									 D3D12_HEAP_TYPE heapType);
2662 	}
2663 
2664 
2665     HRESULT CreateCommittedResource(
2666         const(D3D12_HEAP_PROPERTIES)* pHeapProperties,
2667         D3D12_HEAP_FLAGS HeapFlags,
2668         const(D3D12_RESOURCE_DESC)* pResourceDesc,
2669         D3D12_RESOURCE_STATES InitialResourceState,
2670         const(D3D12_CLEAR_VALUE)* pOptimizedClearValue,
2671         REFIID riidResource,
2672         ID3D12Resource* ppvResource);
2673 
2674     HRESULT CreateHeap(
2675         const(D3D12_HEAP_DESC)* pDesc,
2676         REFIID riid,
2677         ID3D12Heap* ppvHeap);
2678 
2679     HRESULT CreatePlacedResource(
2680         ID3D12Heap pHeap,
2681         UINT64 HeapOffset,
2682         const(D3D12_RESOURCE_DESC)* pDesc,
2683         D3D12_RESOURCE_STATES InitialState,
2684         const(D3D12_CLEAR_VALUE)* pOptimizedClearValue,
2685         REFIID riid,
2686         ID3D12Resource* ppvResource);
2687 
2688     HRESULT CreateReservedResource(
2689         const(D3D12_RESOURCE_DESC)* pDesc,
2690         D3D12_RESOURCE_STATES InitialState,
2691         const(D3D12_CLEAR_VALUE)* pOptimizedClearValue,
2692         REFIID riid,
2693         ID3D12Resource* ppvResource);
2694 
2695     HRESULT CreateSharedHandle(
2696         ID3D12DeviceChild pObject,
2697         const(SECURITY_ATTRIBUTES)* pAttributes,
2698         DWORD Access,
2699         LPCWSTR Name,
2700         HANDLE* pHandle);
2701 
2702     HRESULT OpenSharedHandle(
2703         HANDLE NTHandle,
2704         REFIID riid,
2705         void** ppvObj);
2706 
2707     HRESULT OpenSharedHandleByName(
2708         LPCWSTR Name,
2709         DWORD Access,
2710         HANDLE* pNTHandle);
2711 
2712     HRESULT MakeResident(
2713         UINT NumObjects,
2714         const(ID3D12Pageable)* ppObjects);
2715 
2716     HRESULT Evict(
2717         UINT NumObjects,
2718         const(ID3D12Pageable)* ppObjects);
2719 
2720     HRESULT CreateFence(
2721         UINT64 InitialValue,
2722         D3D12_FENCE_FLAGS Flags,
2723         REFIID riid,
2724         ID3D12Fence* ppFence);
2725 
2726     HRESULT GetDeviceRemovedReason();
2727 
2728     void GetCopyableFootprints(
2729         const(D3D12_RESOURCE_DESC)* pResourceDesc,
2730         UINT FirstSubresource,
2731         UINT NumSubresources,
2732         UINT64 BaseOffset,
2733         D3D12_PLACED_SUBRESOURCE_FOOTPRINT* pLayouts,
2734         UINT* pNumRows,
2735         UINT64* pRowSizeInBytes,
2736         UINT64* pTotalBytes);
2737 
2738     HRESULT CreateQueryHeap(
2739         const(D3D12_QUERY_HEAP_DESC)* pDesc,
2740         REFIID riid,
2741         ID3D12QueryHeap* ppvHeap);
2742 
2743     HRESULT SetStablePowerState(
2744         BOOL Enable);
2745 
2746     HRESULT CreateCommandSignature(
2747         const(D3D12_COMMAND_SIGNATURE_DESC)* pDesc,
2748         ID3D12RootSignature pRootSignature,
2749         REFIID riid,
2750         ID3D12CommandSignature* ppvCommandSignature);
2751 
2752     void GetResourceTiling(
2753         ID3D12Resource pTiledResource,
2754         UINT* pNumTilesForEntireResource,
2755         D3D12_PACKED_MIP_INFO* pPackedMipDesc,
2756         D3D12_TILE_SHAPE* pStandardTileShapeForNonPackedMips,
2757         UINT* pNumSubresourceTilings,
2758         UINT FirstSubresourceTilingToGet,
2759         D3D12_SUBRESOURCE_TILING* pSubresourceTilingsForNonPackedMips);
2760 
2761     LUID GetAdapterLuid();
2762 
2763 
2764 	version(CORRECT_ABI){}
2765 	else
2766 	{
2767 		final D3D12_RESOURCE_ALLOCATION_INFO GetResourceAllocationInfo(
2768 																 UINT visibleMask,
2769 																 UINT numResourceDescs,
2770 																 const(D3D12_RESOURCE_DESC)* pResourceDescs)
2771 		{
2772 			D3D12_RESOURCE_ALLOCATION_INFO temp;
2773 			GetResourceAllocationInfo(&temp, visibleMask, numResourceDescs, pResourceDescs);
2774 			return temp;
2775 		}
2776 
2777 		final D3D12_HEAP_PROPERTIES GetCustomHeapProperties(
2778 													  UINT nodeMask,
2779 													  D3D12_HEAP_TYPE heapType)
2780 		{
2781 			D3D12_HEAP_PROPERTIES temp;
2782 			GetCustomHeapProperties(nodeMask, heapType);
2783 			return temp;
2784 		}
2785 	}
2786 }
2787 
2788 struct D3D12_SUBRESOURCE_DATA {
2789     const(void)* pData;
2790     LONG_PTR     RowPitch;
2791     LONG_PTR     SlicePitch;
2792 }
2793 
2794 struct D3D12_MEMCPY_DEST {
2795     void*  pData;
2796     SIZE_T RowPitch;
2797     SIZE_T SlicePitch;
2798 }
2799 
2800 ///////////////////////////////////////////////////////////////////////////
2801 // D3D12CreateDevice
2802 // ------------------
2803 //
2804 // pAdapter
2805 //      If NULL, D3D12CreateDevice will choose the primary adapter.
2806 //      If non-NULL, D3D12CreateDevice will use the provided adapter.
2807 // MinimumFeatureLevel
2808 //      The minimum feature level required for successful device creation.
2809 // riid
2810 //      The interface IID of the device to be returned. Expected: ID3D12Device.
2811 // ppDevice
2812 //      Pointer to returned interface. May be NULL.
2813 //
2814 // Return Values
2815 //  Any of those documented for
2816 //          CreateDXGIFactory1
2817 //          IDXGIFactory::EnumAdapters
2818 //          D3D12CreateDevice
2819 //
2820 ///////////////////////////////////////////////////////////////////////////
2821 
2822 
2823 extern(Windows) nothrow HRESULT D3D12CreateDevice(
2824                          IUnknown          pAdapter,
2825                          D3D_FEATURE_LEVEL MinimumFeatureLevel,
2826                          REFIID            riid, // Expected: ID3D12Device
2827                          ID3D12Device     *ppDevice);
2828 
2829 extern(Windows) nothrow HRESULT D3D12GetDebugInterface(
2830                          REFIID riid,
2831                          void** ppvDebug);
2832 
2833 
2834 alias PFN_D3D12_CREATE_DEVICE = extern(Windows) nothrow HRESULT function(
2835                          IUnknown          pAdapter,
2836                          D3D_FEATURE_LEVEL MinimumFeatureLevel,
2837                          REFIID            riid, // Expected: ID3D12Device
2838                          ID3D12Device     *ppDevice);
2839 
2840 alias PFN_D3D12_GET_DEBUG_INTERFACE = extern(Windows) nothrow HRESULT function(
2841                          REFIID riid,
2842                          void** ppvDebug);
2843